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

 235. 二叉搜索树的最近公共祖先

class Solution:

    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':

        if not root:

            return None

        if root == p or root == q:       #这句一定要加上

            return root

        if q.val<root.val<p.val or p.val<root.val<q.val:

            return root

        if root.val < p.val and root.val < q.val:

            right = self.lowestCommonAncestor(root.right, p, q)

            return right

        if root.val > p.val and root.val > q.val:

            left = self.lowestCommonAncestor(root.left, p, q)

            return left

简化后 

class Solution: 

  def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') 

        if not root:

            return None

        if root.val < p.val and root.val < q.val:

            right = self.lowestCommonAncestor(root.right, p, q)

            return right

        if root.val > p.val and root.val > q.val:

            left = self.lowestCommonAncestor(root.left, p, q)

            return left

        return root   #即把前三个if合并

701.二叉搜索树中的插入操作

class Solution:
    def insertIntoBST(self, root, val):
        if root is None:
            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

【思考】通过递归函数的返回值完成父子节点的赋值是可以带来便利的。 

注意:以下代码是错误的,return root,并没有返回到跟节点,此if 不能结束,这种写法是错的,必须要在结束条件中加上新的值,并在if里接收它才行。

class Solution(object):
    def insertIntoBST(self, root, val):
        if not root:
            return
        if val > root.val:
            self.insertIntoBST(root.right, val)
            root.right = TreeNode(val)
            return root
        if val < root.val:
            self.insertIntoBST(root.left, val)
            root.left = TreeNode(val)
            return root
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值