题目描述:
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]
中文理解:在二叉搜索树中,求给定两个节点的最近的父节点。
解题思路:根据搜索二叉树的特点,若两个节点的值在root两边,则返回root,若两个节点的值都小于root,则递归到根节点的左子树,若两点的值都大于root的值,则递归到根节点的右子树,一次递归可得结果。
代码(java):
/**
* 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) {
int max=Math.max(p.val,q.val);
int min=Math.min(p.val,q.val);
TreeNode res=null;
if(root==null)return root;
if(root.val<min) res=lowestCommonAncestor(root.right,p,q);
else if(root.val>max) res=lowestCommonAncestor(root.left,p,q);
else if(root.val<=max && root.val>=min)res=root;
return res;
}
}