700. 二叉搜索树中的搜索
难度简单
给定二叉搜索树(BST)的根节点 root
和一个整数值 val
。
你需要在 BST 中找到节点值等于 val
的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null
。
思路
对于二叉搜索树(BST)来说
- 左子节点的值小于当前节点的值
- 右子节点的值大于当前节点的值
因此对于一个特定的节点我们只需要判断当前节点与目标值的大小关系,然后不断遍历即可
是不是看起来很像二分法?其实BST的中序遍历就是一个升序数组!
如果不理解的话请记住这个结论,这在解决部分与BST有关的问题时非常有用,例如
package cn.edu.xjtu.carlWay.tree.searchInBinarySearchTree;
import cn.edu.xjtu.Util.TreeNode.TreeNode;
/**
* 700. 二叉搜索树中的搜索
* 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
* <p>
* 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。
* <p>
* https://leetcode-cn.com/problems/search-in-a-binary-search-tree/
*/
public class Solution {
public TreeNode searchBST(TreeNode root, int val) {
TreeNode node = root;
while (node != null) {
if (node.val == val) {
return node;
} else if (node.val > val) {
node = node.left;
} else {
node = node.right;
}
}
return null;
}
}