首页 > 编程语言 >代码随想录算法训练营day19| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

代码随想录算法训练营day19| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

时间:2024-10-18 22:22:45浏览次数:9  
标签:right return val root self 二叉 搜索 树中 left

学习资料:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html****

学习记录:
235.二叉搜索树的最近公共祖先(加一个函数traversal)

点击查看代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def traversal(self, cur, p, q):
        if cur is None:
            return cur
        if cur.val > p.val and cur.val > q.val:
            left = self.traversal(cur.left, p, q)
            if left is not None:
                return left
        if cur.val < p.val and cur.val < q.val:
            right = self.traversal(cur.right, p, q)
            if right is not None:
                return right
        return cur

    def lowestCommonAncestor(self, root, p, q):
        """
        :type root: TreeNode
        :type p: TreeNode
        :type q: TreeNode
        :rtype: TreeNode
        """
        return self.traversal(root, p, q)

        

701.二叉搜索树中的插入操作(递归法,返回root;根据左<根<右的规则,先左再右子树的遍历)

点击查看代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def insertIntoBST(self, root, val):
        """
        :type root: Optional[TreeNode]
        :type val: int
        :rtype: Optional[TreeNode]
        """
        if not root:
            node = TreeNode(val)
            return node
        if root.val > val:
            root.left = self.insertIntoBST(root.left, val)
        if root.val < val:
            root.right = self.insertIntoBST(root.right, val)
        return root
        

450.删除二叉搜索树中的节点(情况很多,要仔细考虑;用返回值来代替删除过程;删除根节点、删除左子树上的节点、或者删除右子树上的节点,后两种直接递归)

点击查看代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def deleteNode(self, root, key):
        """
        :type root: Optional[TreeNode]
        :type key: int
        :rtype: Optional[TreeNode]
        """

        # 如果root为空,就返回root
        if root is None:
            return root
        # 删除根节点的4种情况:都是通过返回值的形式达到删除节点的目的
        if root.val == key:
            # 1:二叉树就一个根节点,那就返回空
            if not root.left and not root.right:
                return None
            # 2:根节点只有右子树,就返回右子树
            elif not root.left:
                return root.right
            # 3:根节点只有左子树,就返回左子树
            elif not root.right:
                return root.left
            # 4:根节点有左和右子树,因为满足左<根<右的条件,在右子树的某个左节点(该左节点没有左子树)下接左子树。
            else:
                cur = root.right
                while cur.left is not None:
                    cur = cur.left
                cur.left = root.left
                return root.right
        # 当待删除的节点非根节点时,用递归法
        if root.val < key:
            root.right = self.deleteNode(root.right, key)
        if root.val > key:
            root.left = self.deleteNode(root.left, key)
        return root
        

PS:今天有点疲惫了,简单学了一遍,也没听太懂,比较喜欢添加和删除节点这种题。
今天吃了猪肘饭,不合胃口,配菜倒挺香
马上迎来周末了!脑子都快装不下了 哈哈哈

标签:right,return,val,root,self,二叉,搜索,树中,left
From: https://www.cnblogs.com/tristan241001/p/18475149

相关文章

  • 代码随想录算法训练营day18 |530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数
    学习资料:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html530.二叉搜索树的最小绝对差(双指针法,pre&cur,设置最小差值初始为无穷大,当差值<最小差值就更新最小差值)点击查看代码#Definitionforabinarytreenode.#classTreeNode(object):#def__init__(......
  • 二叉查找树和笛卡尔树
    目录二叉查找树定义作用操作查找插入删除缺点笛卡尔树定义操作构造二叉查找树定义​ 二叉查找树(BinarySearchTree,BST),又名二叉搜索树或二叉排序树。​ 它是一类特殊规定的二叉树,它应当满足以下条件:每个节点有唯一确定的权值非叶子节点的权值比其左子树中所有节点权值大非......
  • 图论之搜索遍历
    前言一个重要的板块,倒是有很多有趣的题,从搜索开始吧MazeTacToeS暴力即可,\(3^9\times25\times25\)绰绰有余,把状态转换为三进制\(dfs\)ConnectedComponents?根据鸽巢原理,必定有一个点被割去的边\(\le\frac{m}{n}\),然后我们找到这个点,对于连接他的边均在同一个联......
  • 二叉树和度为二的有序树的区别
    一、定义与结构度为二的有序树:在这种树结构中,每个节点最多有两个子节点。子节点的顺序是重要的,即使两个子节点的值相同,只要他们的位置不同,他们就被视为是不同的子节点。当一个节点只有一个子节点时,该子节点的位置(左或右)并无特定要求,也即无需区分其左右次序。二叉树:二叉树......
  • RRT*路径搜索算法matlab代码
    一、算法简介      RRT*路径搜索算法相比于RRT路径搜索算法多了重选父节点和重布线的过程:二、实现效果对比(比RRT算法更光滑) RRT路径搜索算法实现效果RRT*路径搜索算法实现效果三、代码完整代码私聊!......
  • 信息收集-IP查询和利用搜索引擎收集
    IP查询IP地址定位:高精度IP定位4-openGPS.cn利用搜索引擎搜集信息建议用bing搜索语法:关键词:关键内容索引描述inurl:搜索包含指定url的网页intitle:限制搜索的网页标题intext:只搜索网页部分包含的文字(忽略标题、url)site:限制搜索想要的域名filetyp......
  • 【智能算法应用】引力搜索算法求解二维路径规划问题
    摘要引力搜索算法(GSA)是一种基于引力学说的启发式算法,用于解决复杂的优化问题。本文应用GSA于二维路径规划问题,通过优化路径来避开障碍物并达到目标点。实验结果表明,GSA在路径规划中具有良好的表现,尤其在多障碍场景中,其优化路径平滑且避障效果显著。理论引力搜索算法是......
  • 搜索,问题 I: 围成面积
    题目描述编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10×10的二维数组中,有“*”围住了15个点,因此面积为15。 输入10×10的图形。输出输出面积。样例输入 复制0000000000000......
  • 推断二叉树(进阶)
    Description给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历。Input输入第一行为一个正整数n表示二叉树的节点数目,节点编号从1到n,其中1为根节点。第2行有n个数字,第i个数字表示i的父亲节点。(1的父亲节点为0,表示无)第3行为中......
  • B+树、红黑树、平衡二叉树
    1.概述这三种数据结构都用于解决动态查找问题,即能够在插入、删除的同时保持高效的查找性能。它们广泛应用于数据库、文件系统、内存管理等领域。但它们的具体结构和应用场景有所不同。B+树(B+Tree):B+树是一种自平衡的多叉树,常用于数据库系统和文件系统中。它的特点是所有......