問題: 給定兩個子節點,求在二叉樹中的最小公共祖先。
思路: 最小公共祖先有兩種情況: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;
}