题目链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
难度:中等

描述:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 pq,最近公共祖先表示为一个节点 x,满足 xpq 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

提示:
pq必在二叉树中且p != q

题解

  1. # Definition for a binary tree node.
  2. # class TreeNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.left = None
  6. # self.right = None
  7. class Solution:
  8. def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
  9. # 递归终止条件
  10. if root is None:
  11. return None
  12. if p == root or q == root:
  13. return root
  14. left = self.lowestCommonAncestor(root.left, p, q)
  15. right = self.lowestCommonAncestor(root.right, p, q)
  16. # 没有找到p, q
  17. if left is None and right is None:
  18. return None
  19. # p, q都在右子树中
  20. if left is None:
  21. return right
  22. # p, q都在左子树中
  23. if right is None:
  24. return left
  25. # p, q分别在左右子树中
  26. return root