1、题目描述
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
2、算法分析
使用递归。题目说的是二叉搜索树,也就是有序的。当前结点的值大于左子树的结点值。当前结点值小于右子树的任意结点值。
使用递归找到对应的的结点即可。
return searchBST(root.val < val ? root.right : root.left,val);
看下TreeNode的定义:
// Definition for a binary tree node. public class TreeNode { int val; // 结点值 TreeNode left; // 左孩子结点指针 TreeNode right; // 右孩子结点指针 TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { // 构造方法 this.val = val; this.left = left; this.right = right; } }
3、代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root == null){
return null;
}
if(root.val == val){
return root;
}
return searchBST(root.val < val ? root.right : root.left,val);
}
}