题解 | #二叉搜索树的最近公共祖先#

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

https://www.nowcoder.com/practice/d9820119321945f588ed6a26f0a6991f

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param root TreeNode类 
# @param p int整型 
# @param q int整型 
# @return int整型
#
class Solution:
    def lowestCommonAncestor(self , root: TreeNode, p: int, q: int) -> int:
        # write code here
        # 找二叉树公共节点,一般就是记录路径然后找最后一个相等的元素
        path1 = []
        path2 = []
        if root==None:
            return None
        self.find(root,path1,p)
        self.find(root,path2,q)
        i = 0
        res = 0
        while i<len(path1) and i <len(path2):
            # 如果路径相等的话就继续
            if path1[i] == path2[i]:
                res = path1[i]
                i+=1
            else:
                break
            
        return res
            
    
    def find(self,root:TreeNode,path:list,n:int):
        # 建议不要直接对传入参数操作,除非你想对它进行修改改变
        cur = root
        while cur.val!=n and cur:
            path.append(cur.val)
            if n>cur.val:
                cur = cur.right
            else:
                cur = cur.left
        # 这题最后要把自己这个节点也加上
        path.append(cur.val)


  • step 1:根据二叉搜索树的性质,从根节点开始查找目标节点,当前节点比目标小则进入右子树,当前节点比目标大则进入左子树,直到找到目标节点。这个过程成用数组记录遇到的元素。
  • step 2:分别在搜索二叉树中找到p和q两个点,并记录各自的路径为数组。
  • step 3:同时遍历两个数组,比较元素值,最后一个相等的元素就是最近的公共祖先。
剑指offer刷题笔记 文章被收录于专栏

24秋招剑指offer刷题的笔记

全部评论

相关推荐

死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务