📅  最后修改于: 2023-12-03 14:44:51.248000             🧑  作者: Mango
现有一棵二叉搜索树(Binary Search Tree),请实现一个函数,返回树中两个指定节点之间的路径上的公共节点。
要求:
首先对两个节点进行比较得到它们的大小关系,假设p1是较小的节点。
从根节点开始遍历,如果当前节点的值小于p1的值,就移动到当前节点的右子树;如果大于p1的值,则移动到当前节点的左子树。
不断重复上述操作,直到找到一个节点,它的值既大于等于p1的值,又小于等于p2的值。该节点即为所求的公共节点。
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if p.val > q.val:
p, q = q, p # 保证p的值小于q的值
while root:
if root.val < p.val:
root = root.right
elif root.val > q.val:
root = root.left
else:
return root
时间复杂度:O(log N),其中 N 是二叉搜索树中的节点数。在最坏的情况下,程序会遍历数的高度,因此时间复杂度为 O(log N)。
空间复杂度:O(1),因为没有利用到额外的空间,只存储了当前节点的指针。