LeetCode 腾讯50题Python实现之《二叉树的最近公共祖先》

系统 1447 0

题目

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

示例 1:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6
解释: 节点 2 和节点 8 的最近公共祖先是 6。
示例 2:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
输出: 2
解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。

说明:

所有节点的值都是唯一的。
p、q 为不同节点且均存在于给定的二叉搜索树中。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

直接查找
基于二叉搜索树的特性,直接查找最近的公共祖先。最近公共祖先应该是第一个介于p,q之间的节点(这题p,q大小关系不定),直接搜索就可以了。代码如下:

代码

ref:https://leetcode-cn.com/problems/two-sum/solution/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu-xian-py/

            
              
                # 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
              
               p
              
                .
              
              val 
              
                >
              
              q
              
                .
              
              val
              
                :
              
              
            p
              
                ,
              
              q 
              
                =
              
              q
              
                ,
              
              p
        
              
                while
              
              
                True
              
              
                :
              
              
                if
              
               root
              
                .
              
              val
              
                >
              
              q
              
                .
              
              val
              
                :
              
              
                root 
              
                =
              
               root
              
                .
              
              left
            
              
                elif
              
               root
              
                .
              
              val 
              
                <
              
               p
              
                .
              
              val
              
                :
              
              
                root 
              
                =
              
               root
              
                .
              
              right
            
              
                else
              
              
                :
              
              
                return
              
               root    


            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论