236. 二叉树的最近公共祖先

image.png
image.png

后续递归

  1. class Solution {
  2. public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
  3. if (root == null || root == p || root == q) { // 递归结束条件
  4. return root;
  5. }
  6. // 后序遍历
  7. TreeNode left = lowestCommonAncestor(root.left, p, q);
  8. TreeNode right = lowestCommonAncestor(root.right, p, q);
  9. if(left == null && right == null) { // 若未找到节点 p 或 q
  10. return null;
  11. }else if(left == null && right != null) { // 若找到一个节点
  12. return right;
  13. }else if(left != null && right == null) { // 若找到一个节点
  14. return left;
  15. }else { // 若找到两个节点
  16. return root;
  17. }
  18. }
  19. }