首页 > 试题广场 >

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

[编程题]二叉搜索树的最近公共祖先
  • 热度指数:81358 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先.
2.二叉搜索树是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值
3.所有节点的值都是唯一的。
4.p、q 为不同节点且均存在于给定的二叉搜索树中。
数据范围:
3<=节点总数<=10000
0<=节点值<=10000

如果给定以下搜索二叉树: {7,1,12,0,4,11,14,#,#,3,5},如下图:


示例1

输入

{7,1,12,0,4,11,14,#,#,3,5},1,12

输出

7

说明

节点1 和 节点12的最近公共祖先是7   
示例2

输入

{7,1,12,0,4,11,14,#,#,3,5},12,11

输出

12

说明

因为一个节点也可以是它自己的祖先.所以输出12   

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
class Solution:
    def lowestCommonAncestor(self , root: TreeNode, p: int, q: int) -> int:
        # write code here
        if p < root.val and q < root.val:
            return self.lowestCommonAncestor(root.left, p, q)
        elif p > root.val and q > root.val:
            return self.lowestCommonAncestor(root.right, p, q)
        else:
            return root.val

编辑于 2024-03-10 21:54:04 回复(0)
# 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
        if not root:
            return None
        
        # 如果p和q都小于当前节点的值,说明它们的最近公共祖先在左子树上
        if p < root.val and q < root.val:
            return self.lowestCommonAncestor(root.left, p, q)
        
        # 如果p和q都大于当前节点的值,说明它们的最近公共祖先在右子树上
        if p > root.val and q > root.val:
            return self.lowestCommonAncestor(root.right, p, q)
        
        # 否则,当前节点就是它们的最近公共祖先
        return root.val

发表于 2023-10-17 11:04:46 回复(0)
class Solution:
    def lowestCommonAncestor(self , root: TreeNode, p: int, q: int) -> int:
        # write code here
        if root.val < p and root.val < q:
            return self.lowestCommonAncestor(root.right, p, q)
        if root.val > p and root.val > q:
            return self.lowestCommonAncestor(root.left, p, q)
        return root.val
发表于 2023-08-14 14:03:55 回复(0)
class Solution:
    def lowestCommonAncestor(self , root: TreeNode, p: int, q: int) -> int:
        while((root.val > p and root.val > q)or(root.val < p and root.val < q)):
            if (root.val > p and root.val > q):
                root = root.left
            else:
                root = root.right
        return root.val

发表于 2023-07-26 15:25:27 回复(0)
class Solution:
    def lowestCommonAncestor(self , root , p , q ):
        # write code here
        if not root:
            return None
        if root.val <p and root.val<q:
            return self.lowestCommonAncestor(root.right,p,q)
        if root.val>p and root.val>q:
            return self.lowestCommonAncestor(root.left,p,q)
        return root.val

发表于 2021-11-17 10:23:07 回复(1)

问题信息

上传者:牛客301499号
难度:
8条回答 3866浏览

热门推荐

通过挑战的用户

查看代码