[leetcode] 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 Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”

Given binary search tree:  root = [6,2,8,0,4,7,9,null,null,3,5]

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

Example 1:

Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
Output: 6
Explanation: The LCA of nodes 2 and 8 is 6.

Example 2:

Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
Output: 2
Explanation: The LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself 
             according to the LCA definition.

Note:

  • All of the nodes' values will be unique.
  • p and q are different and both values will exist in the BST.

 分析:题目意思也很清楚,解释一下如下:给定一个二叉搜索树,要求找两个节点的最小的父亲。注意到这里时二叉搜索树。也就是说一个节点左子树的值一定小于右子树的值。这是一个核心点,找到这个点我们就可以来写递归代码了。
1 class Solution {
2     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
3         if ( root == null ) return null;
4         if ( root.val > Math.max(p.val,q.val) ) return lowestCommonAncestor(root.left,p,q);
5         else if ( root.val < Math.min(p.val,q.val) ) return lowestCommonAncestor(root.right,p,q);
6         else return root;
7     }
8 }
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/boris1221/p/9306992.html