问题: 给定两个子节点,求在二叉树中的最小公共祖先。
思路: 最小公共祖先有两种情况:1)两个节点为祖子关系;2)两个节点分别在最小公共祖先两侧;考虑这样一种遍历方式,先处理当前节点,若为两节点之一则返回,然后分别递归调用处理左右节点,再结合左右子树的处理结果返回最终结果。
TreeNode LCA3(TreeNode root,TreeNode p,TreeNode q){
if(root==null||p==null||q==null)
return null;
if(root==p||root==q)
return root;
TreeNode left=LCA3(root.left,p,q);
TreeNode right=LCA3(root.right,p,q);
if(left!=null&&right!=null)
return root;
return left==null?right:left;
}