当前位置: 首页 > 后端技术 > Python

力扣-面试题68-I.一棵二叉搜索树的最近共同祖先【剑指Offer】【Python】

时间:2023-03-26 16:04:44 Python

题目Leetcode给定一棵二叉搜索树,找到树中两个指定节点的最近共同祖先。百度百科对最近共同祖先的定义是:“对于有根树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是不同的节点,都存在于给定的二叉搜索树中。注:本题与主站235题相同:https://leetcode-cn.com/probl...思路是递归利用二叉搜索树的特性,只有三种情况:1.全部在左子树:递归判断左子树2.全部在右子树:递归判断右子树3.左右子树分别:根节点是最近的公共祖先代码Python3#定义一个二叉树节点。#classTreeNode:#def__init__(self,x):#self.val=x#self.left=None#self.right=Noneclass解决方案:deflowestCommonAncestor(self,root:'TreeNode',p:'TreeNode',q:'TreeNode')->'TreeNode':#如果root.val>p.val和root.val>q.val都在左子树中:returnself.lowestCommonAncestor(root.left,p,q)#全部在右子树elifroot.val