Lowest Common Ancestor of a Binary Tree Leetcode

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

        _______3______
       /              \
    ___5__          ___1__
   /      \        /      \
   6      _2       0       8
         /  \
         7   4

For example, the lowest common ancestor (LCA) of nodes 5 and 1 is 3. Another example is LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.

这道题我应该是做过的。。。然而一开始还是没做出来。。。究其原因,就是一开始就用了stack而没有往递归的方向想,用递归是最简单的。

最近树的题目真的是生疏了,要多加练习才好。

这里有个需要注意的地方就是,比较的时候一定要TreeNode直接比较,不要比较val,因为给的就是treenode,要treenode相等才是相等,不是值相等就是相等,因为还会有值一样的情况,这样就很难办。

public class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null) {
            return null;
        }
        if (root == p || root == q) {
            return root;
        }
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        if (left != null && right != null) {
            return root;
        }
        if (left == null && right != null) {
            return right;
        }
        if (left != null && right == null) {
            return left;
        }
        return null;
    }
}

但这个代码写的其实蛮冗余的,可以这样写

public class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null || root == p || root == q) {
            return root;
        }
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        if (left != null && right != null) {
            return root;
        }
        return left == null ? right : left;
    }
}

以后写完还是要自己多改改。

posted @ 2017-01-29 06:13  璨璨要好好学习  阅读(155)  评论(0编辑  收藏  举报