关闭

LeetCode 236. Lowest Common Ancestor of a Binary Tree

510人阅读 评论(0) 收藏 举报
分类:

LeetCode 236. Lowest Common Ancestor of a Binary Tree

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.

题目大意:

找两个节点的最近祖先

思路:

  • 如果p在左子树里,q在右子树里(或者反过来,p在右子树,q在左子树),说明当前节点为pq的最小祖先。
  • 反之,说明pq要么都在左子树里,要么都在右子树里。需要分别遍历左子树和右子树。
  • 用后续遍历的思想,从下往上,如果遇到了p(或q),就把p(或q)的值向上返回。以下图为例,p=3,q=9。现在要查找3和9的最近祖先。把3和9一层一层向上返回,直到6。此时6的左子树接收返回值3,右子树接收返回值9,说明6是3和9的最近祖先。

这里写图片描述

感觉不太好理解,或许看看代码能加深一下理解。另外递归确实不好写,java代码如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
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;
        // 替换成下面的语句也可以
        if((left == p && right == q)||(left == q && right == p)) {
            return root;
        }

        return (left != null) ? left : right;

    }
}

注:学渣心里苦,不要学楼主,平时不努力,考试二百五,哭~

这里写图片描述

0
0
查看评论

[LeetCode 236] Lowest Common Ancestor of a Binary Tree

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: “T...
  • sbitswc
  • sbitswc
  • 2015-08-25 13:31
  • 2441

leetcode 236. Lowest Common Ancestor of a Binary Tree-二叉树共同祖先|深度遍历|递归|非递归

原题链接:236. Lowest Common Ancestor of a Binary Tree 【思路-Java】dfs|递归实现 本题是二叉树的深度遍历的典型应用,基础还是二叉树的遍历。 以根节点为起点,往左右分支上寻找,如果找到了 p 或 q 节点,则返回该节点。否则,继续向叶子节点寻...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016-06-11 11:44
  • 688

LeetCode 236. Lowest Common Ancestor of a Binary Tree(二叉树的最低公共祖先)

原题网址:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ Given a binary tree, find the lowest common ancestor (LCA) of two given ...
  • jmspan
  • jmspan
  • 2016-04-06 06:43
  • 589

235. Lowest Common Ancestor of a Binary Search Tree [easy] (Python)

题目链接https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/题目原文 Given a binary search tree (BST), find the lowest common ances...
  • coder_orz
  • coder_orz
  • 2016-05-25 15:26
  • 890

leetcode 235: Lowest Common Ancestor of a Binary Search Tree

leetcode 235: Lowest Common Ancestor of a Binary Search Tree python, java, c++
  • xudli
  • xudli
  • 2015-07-11 06:34
  • 10639

leetcode 236: Lowest Common Ancestor of a Binary Tree

leetcode 236: Lowest Common Ancestor of a Binary Tree PYTHON, JAVA, C++
  • xudli
  • xudli
  • 2015-07-14 02:35
  • 6348

[Java]LeetCode235 Lowest Common Ancestor of a Binary Search Tree

[Java]LeetCode235 Lowest Common Ancestor of a Binary Search Tree
  • fumier
  • fumier
  • 2015-08-22 21:31
  • 736

LeetCode 235: Lowest Common Ancestor of a Binary Search Tree

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST. According to the definition of LCA on Wikipe...
  • sunao2002002
  • sunao2002002
  • 2015-07-27 18:41
  • 2166

LeetCode_Lowest Common Ancestor

题目:给出一颗二叉树中的节点n1和n2,要求
  • loveRooney
  • loveRooney
  • 2014-06-22 14:58
  • 2190

236. Lowest Common Ancestor of a Binary Tree

题目: Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on Wiki...
  • u010455041
  • u010455041
  • 2015-12-21 17:15
  • 168
    个人资料
    • 访问:278426次
    • 积分:6534
    • 等级:
    • 排名:第4398名
    • 原创:383篇
    • 转载:55篇
    • 译文:1篇
    • 评论:93条
    联系方式
    博客专栏
    参与本书第一章的部分译制工作
    最新评论