700.二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 二叉搜索s中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。
输入:root = [4,2,7,1,3], val = 2 输出:[2,1,3]
二叉搜索树满足如下性质:
- 左子树所有节点的元素值均小于根的元素值;
- 右子树所有节点的元素值均大于根的元素值。
我们可以使用递归算法,可以得如下:
若 root 为空 或者 root.val == val则返回当前root
若 val > root.val,根据二叉搜索树的性质,递归右子树
若 val < root.val,根据二叉搜索树的性质,递归左子树
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root == null || root.val == val){
return root;
}
return root.val > val? searchBST(root.left, val) : searchBST(root.right, val);
}
}
我们也可以使用迭代来做这道题
若 root 为空 或者 root.val == val则返回当前root
若 val > root.val,根据二叉搜索树的性质,将root 改为 root.right
若 val < root.val,根据二叉搜索树的性质,将root 改为 root.left
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
while(root != null && root.val != val){
root = root.val > val ? root.left : root.right;
}
return root;
}
}