题目如下 :
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]
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.
题目大意就是给定一颗二叉排序树 还有他两个子节点的值 求出这两个子节点的最小共同祖先
题目解决方案很简单(前提是能想到这么做 想不到就很难 :( ) 从这颗数的根节点开始 看这个节点的值是不是大于给定两个值中的min 并且 小于给定两个值的的max 如果是 那么就返回这个节点 如果不是 再看他是不是比max还要大 如果大那就证明这个节点偏大了 就定位到他的左子树 如果他比min还小 那就证明这个节点偏小 就要定位到他的右子树 。 这样迭代 就可得出节点的位置
代码如下:
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
int min = p.val > q.val ? q.val :p.val;
int max = p.val > q.val ? p.val :q.val;
return helper(root,min,max);
}
public TreeNode helper(TreeNode r,int min,int max) {
if(r.val >= min && r.val <= max) {
return r;
}
if(r.val >= max) {
return helper(r.left,min,max);
}
else {
return helper(r.right,min,max);
}
}