Leetcode 第二十一天 2024.8.7

1. :二叉搜索树的最近公共祖先
 题目链接: 235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode)
应用条件:递归,二叉搜索树

难点:

这道题可以直接用二叉树最近公共祖先实现,但也可以利用二叉搜索数自己的特性,去从上往下遍历,找到的第一个在p,q节点值中间的节点,即为p,q的最近公共祖先

个人错误:

思路:

思路一,当成普通二叉树从下往上遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if not root or root == p or root == q:
            return root
        left = self.lowestCommonAncestor(root.left,p,q)
        right = self.lowestCommonAncestor(root.right,p,q)
        if left == None and right == None:
            return None
        elif left != None and right == None:
            return left
        elif right != None and left == None:
            return right
        else:
            return root
        

思路二,二叉搜索数从上往下:

 

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if root is None:
            return root
        if root.val > p.val and root.val > q.val:
            left = self.lowestCommonAncestor(root.left,p,q)
            if left != None:
                return left
        if root.val < p.val and root.val < q.val:
            right = self.lowestCommonAncestor(root.right,p,q)
            if right != None:
                return right
        return root

2. :二叉搜索树中的插入操作
 题目链接: 701. 二叉搜索树中的插入操作 - 力扣(LeetCode)
应用条件:递归

难点:

递归二叉搜索数,遇到空节点且数值合适的位置放进去。

个人错误:

思路:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
        if root == None:
            return TreeNode(val)
        self.trav(root,val)
        return root

    def trav(self,root,val):
        if root.val < val and root.right == None:
            root.right = TreeNode(val)
        elif root.val < val and root.right != None:
            self.trav(root.right,val)
        elif root.val > val and root.left == None:
            root.left = TreeNode(val)    
        elif root.val > val and root.left != None:
            self.trav(root.left,val)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值