# LeetCode 236. Lowest Common Ancestor of a Binary Tree

## 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的最近祖先。

/**
* 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;

}
}

#### leetcode 236: Lowest Common Ancestor of a Binary Tree

2015-07-14 02:35:39

#### [LeetCode 236] Lowest Common Ancestor of a Binary Tree

2015-08-25 13:31:55

#### leetcode 235: Lowest Common Ancestor of a Binary Search Tree

2015-07-11 06:34:08

#### [Java]Leetcode236 Lowest Common Ancestor of a Binary Tree

2015-08-23 08:58:31

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

2016-04-06 06:43:21

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

2016-05-25 15:26:02

#### AIZU Lowest Common Ancestor Tarjan求LCA

2016-11-11 15:57:08

#### LeetCode_Lowest Common Ancestor

2014-06-22 14:58:28

#### leetcode 236. Lowest Common Ancestor of a Binary Tree 解题报告

2016-09-07 15:00:39

#### [LeetCode] Lowest Common Ancestor of a Binary Tree

2015-07-25 18:57:56