1. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
方法一:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def lowestCommonAncestor(root, p, q):
if p.val > q.val:
temp = p
p = q
q = temp
while root is not None:
if root.val < p.val:
root = root.right
elif root.val > q.val:
root = root.left
else:
break
return root
方法二:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def lowestCommonAncestor(root, p, q):
if root.val < p.val and root.val < q.val:
return lowestCommonAncestor(root.right, p, q)
if root.val > p.val and root.val > q.val:
return lowestCommonAncestor(root.left, p, q)
return root