您的位置:首页 > 其它

Lowest Common Ancestor of a Binary Tree(***)

2015-08-13 20:57 316 查看
题目:求二叉树的最近公共子祖先 , 注意这里不是BST

解题思路:

求LCA of BT , 就三种情况:

1. p ,q 为root的左右子树中的节点 == > return root;

2. p q 在root的一棵子树中 ,p为父辈 ==> return p;

3. q为父辈 ==> return q;

所以,实际就是一个遍历的过程,只是在遍历的时候,加一些判断的操作!

[code]public class Solution {
    // 要求LCA不外乎三种情况
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        // 找到了对应p 或 q 则返回
        if(root == null || root == p || root == q) return root;

        TreeNode left = lowestCommonAncestor(root.left , p , q);
        TreeNode right = lowestCommonAncestor(root.right, p , q);
        // 1. p , q 在root的左右子树中
        if(left != null && right != null) return root;
        // p q 只在root的一棵子树中,p 为父辈或q为父辈
        return left == null? right : left;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: