LeetCode.236.给定一个二叉树,找到该树中两个指定节点的最近公共祖先。
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode, q) {
if (root == null || root == p || root == q) return root;
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if (left == null && right == null) return null; // 1.
if (left == null) return right; // 3.
if (right == null) return left; // 4.
return root; // 2. if (left != null and right != null)
}
}
示例1:
输入:root=[3,5,1,6,2,0,8,nu11,nu11,7,4],p = 6, q = 7
输出:5
进入程序,第一行if不满足;
递归左子树,
-
当前节点为5,递归左子树
-
当前节点为6,满足第一行if,返回6
-
-
当前节点为5,递归右子树
-
当前节点为2,递归左子树
-
当前节点为7,满足第一行if,返回7
-
-
当前节点为2,递归右子树
-
当前节点为4,左右都为null,返回null
-
-
这时,对于当前节点2来看,left为7,right为空,直接返回7
-
-
对于当前节点5来看,left为6,right为7,直接返回当前节点5