题目
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出: 3
解释: 节点 5 和节点 1 的最近公共祖先是节点 3。
思路
代码
//返回的结果是p q在root中的公共节点,因此计算在左右子树的公共节点,看是否存在,不存在那就是根节点
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null){
return null;
}
if(root==p||root==q){
return root;
}
// 在左子树中的公共节点
TreeNode left = lowestCommonAncestor(root.left,p,q);
// 在右子树中的公共节点
TreeNode right = lowestCommonAncestor(root.right,p,q);
//左子树中没有公共节点
if(left==null){
return right;
}
// 右子树中没有公共节点
if(right==null){
return left;
}
// 两个都有,那就是根节点
if(left!=null&right!=null){
return root;
} //pq在两侧
// 两个都没有,那就没有公共节点
return null;
}