📅  最后修改于: 2023-12-03 15:39:56.497000             🧑  作者: Mango
题目描述:在给定的二叉搜索树中,找到两个节点的最小公共祖先。
二叉搜索树是具有以下属性的二叉树:
可以使用递归方法来解决问题。
如果根节点的值比两个节点的值都大,那么最小公共祖先一定在左子树中;如果根节点的值比两个节点的值都小,那么最小公共祖先一定在右子树中;否则,根节点就是最小公共祖先。
def lowest_common_ancestor(root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
if root is None or root == p or root == q:
return root
left = lowest_common_ancestor(root.left, p, q)
right = lowest_common_ancestor(root.right, p, q)
if left is None:
return right
elif right is None:
return left
else:
return root
时间复杂度:O(n),其中 n 为二叉搜索树中节点的个数。在最坏的情况下,需要递归遍历整棵树。
空间复杂度:O(n)。在最坏的情况下,递归调用栈将达到深度 n。