2023.6.16
记住只要遇到root.val在p与q之间,这个root就一定是最近公共祖先
自写版,递归的思路是
遇到空节点返还
遇到公共祖先节点返还
其他情况跟下一题有点类似
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
# 使用前序遍历,中左右
self.p = min(p.val, q.val)
self.q = max(p.val, q.val)
return self.getit(root)
def getit(self, root):
if root == None:
return None
if self.p <= root.val <=self.q:
return root
getleft = self.getit(root.left)
getright = self.getit(root.right)
if getleft == None and getright != None:
return getright
if getleft != None and getright == None:
return getleft
if getleft == None and getright == None:
return None
随想录:
好tmd精简,因为这里每次递归只选择向左或向右,所以直接一条路走到最近公共祖先。
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
# 使用前序遍历,中左右
self.p = p.val
self.q = q.val
return self.getit(root)
def getit(self, root):
# if root == None:
# return None
if self.p < root.val and self.q < root.val:
# 向左遍历
# getleft = self.getit(root.left)
# if getleft:
# return getleft
return self.getit(root.left)
if self.p > root.val and self.q > root.val:
# getright = self.getleft(root.right)
# if getright:
# return getright
return self.getit(root.right)
return root
该代码实现了一个使用递归的算法,通过前序遍历在二叉树中寻找两个给定点的最低公共祖先。关键在于比较当前节点值与给定点的值,根据比较结果决定是向左子树还是右子树递归查找。如果当前节点值在给定点值之间,则当前节点即为最近公共祖先。
1959

被折叠的 条评论
为什么被折叠?



