思路:利用二叉搜索树左子树中所有结点值小于根结点值,右子树中所有结点值大于根结点值的性质。
因此,公共祖先就是最近的一左一右的情况,代码很好理解。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
while True:
if root.val==p.val or root.val==q.val:#如果根结点就是某一个结点
return root
elif p.val<root.val<q.val or q.val<root.val<p.val:#如果满足一左一右
return root
elif p.val<root.val:#都在左子树
root=root.left
elif p.val>root.val:#都在右子树
root=root.right