LeetCode——Lowest Common Ancestor of a Binary Search Tree

Description:

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 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).”

        _______6______
       /              
    ___2__          ___8__
   /              /      
   0      _4       7       9
         /  
         3   5

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

给出一颗二叉查找树,两个节点,找出这两个节点的最近公共祖先。

思路:递归可以使这道题变得异常的简单。如果两个节点是在根节点两侧,那么最近的公共祖先就是这个根节点,如果是左侧(右侧),则把根节点递归到左子树(右子树)。

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
12         if(root==null || p==null || q==null) {
13             return null;
14         }
15         int max = p.val > q.val ? p.val : q.val;
16         int min = p.val < q.val ? p.val : q.val;
17         if(max < root.val) {
18             return lowestCommonAncestor(root.left, p, q);
19         }
20         else if(min > root.val) {
21             return lowestCommonAncestor(root.right, p, q);
22         }
23         else {
24             return root;
25         }
26         
27     }
28 }
原文地址:https://www.cnblogs.com/wxisme/p/4726001.html