链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
递归,先到左右子树中找公共祖先,若返回均不为null,则两节点分别分布在左右子树中,返回root;若其中一个返回值为null,则两节点同时在左子树或同时在右子树中,返回左/右子树返回上来的答案即可。
java代码:
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null||p==root||q==root)
return root;
TreeNode left = lowestCommonAncestor(root.left,p,q);
TreeNode right = lowestCommonAncestor(root.right,p,q);
if(left!=null&&right!=null)
return root;
if(left!=null)
return left;
if(right!=null)
return right;
return null;
}
}