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 nodes2
and8
is6
.
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 nodes2
and4
is2
, 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 }