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