236. Lowest Common Ancestor of a Binary Tree

Problem:
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.

Analysis:
Find p and q in left and right subtrees. 
1. find both p and q in right and left subtree, lca is current node
2. One of the subtrees has result, lca is the one. 

Solution:

 /**  
  * 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;  
     return left == null? right : left;  
   }  
 }  

评论

此博客中的热门博文

663. Equal Tree Partition

776. Split BST

426. Convert Binary Search Tree to Sored Doubly Linked List