例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]
输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6
解释: 节点 2 和节点 8 的最近公共祖先是 6。
思路:根据定义,左子树节点小于根节点,右子树节点大于跟节点
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': temp = None if p.val > q.val: temp = p p = q q = temp if p.val <= root.val <= q.val: return root if root.val < p.val < q.val: return self.lowestCommonAncestor(root.right, p, q) if root.val > q.val > p.val: return self.lowestCommonAncestor(root.left, p, q) a = Tree = TreeNode(6) b = Tree.left = TreeNode(2) c = Tree.right = TreeNode(8) d = b.left = TreeNode(0) e = b.right = TreeNode(4) f = c.left = TreeNode(7) g = c.right = TreeNode(9) h = d.left = TreeNode(None) i = d.right = TreeNode(None) j = e.left = TreeNode(3) k = e.right = TreeNode(5) s = Solution() print(s.lowestCommonAncestor(b, c, d).val)
题目来源于LeetCode每日一练