首页 > 其他 > 详细

Lowest Common Ancestor of a Binary Tree Leetcode

时间:2017-01-29 10:44:46      阅读:202      评论:0      收藏:0      [点我收藏+]

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;
    }
}

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

Lowest Common Ancestor of a Binary Tree Leetcode

原文:http://www.cnblogs.com/aprilyang/p/6357308.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!