最小公共祖先 III

問題: 給定兩個子節點,求在二叉樹中的最小公共祖先。

思路: 最小公共祖先有兩種情況: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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章