剑指 Offer 68 - II. 二叉树的最近公共祖先
思路
注意,这里不是二叉搜索树了
因此判断方法有点区别
如果根节点为空,或者根节点等于某个节点那么直接返回根结点
以左右节点去搜索
如果左右都为空,直接返回null
如果左为空右不空,返回右节点
如果右为空左不空,返回左节点
如果左右都不可,返回根节点
代码
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;
else if(left==null)return right;//right!=null
else if(right==null)return left;//left!=null
return root;//left!=null&&right!=null
}