📅  最后修改于: 2023-12-03 15:12:46.010000             🧑  作者: Mango
这个问题考察了程序员对递归和树的理解以及应用。问题描述如下:
给定一颗二叉树T和两个节点p,q,找到他们的最近公共祖先节点。
这个问题可以使用递归来解决。
def lowestCommonAncestor(root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if not root or root == p or root == q:
return root
left = lowestCommonAncestor(root.left, p, q)
right = lowestCommonAncestor(root.right, p, q)
if left and right:
return root
if left:
return left
return right
上面这段代码实现了找到最近公共祖先节点的功能。其中,root表示当前要处理的子树,p和q为要查找最近公共祖先的两个节点。
代码实现的思路是:
这样的时间复杂度为O(n),其中n为二叉树中节点的数量。