「这是我参与11月更文挑战的第 1 天,活动详情查看:2021最后一次更文挑战」
原题链接
700. 二叉搜索树中的搜索 - 力扣(LeetCode) (leetcode-cn.com)
题目描述
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
测试用例
给定二叉搜索树:
4
/ \
2 7
/ \
1 3
和值: 2
你应该返回如下子树:
2
/ \
1 3
在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。
参数限制
无
二叉搜索树特点
二叉搜索树,英文简称 BST,是一棵二叉树,每个节点都有以下特性:
- 大于左子树上任意一个节点的值
- 小于右子树上任意一个节点的值
如图所示,就是一棵二叉搜索树,再标记出他的搜索顺序。而这种遍历的顺序,也可以称之为中序遍历
在二叉树中查找元素,有着数组二分查找同样的性能。以查找一个数 6 为例:
从根节点 5 开始
-> 比 5 大
-> 和 5 的右节点 7 比较
-> 比 7 小
-> 和 7 的左节点 6 比较
-> 刚好找到
再以查找一个数 3 为例:
从根节点 5 开始
-> 比 5 小
-> 和 5 的左节点 2 比较
-> 比 2 大
-> 和 2 的右节点 4 比较
-> 比 4 小
-> 和 4 的左节点比较
-> 4 无左节点
-> 这棵树没有 3 节点
分析
具体的查找思路就是标准的二叉树搜索思路
二叉树的遍历具有非常强烈的递归风格,一个比较通用的遍历框架如下
function trave(root){
// 如果有逻辑在这里执行,此为前序遍历
trave(root.left);
// 如果有逻辑在这里执行,此为中序遍历
trave(root.right);
// 如果有逻辑在这里执行,此为后序遍历
}
代码
var searchBST = function(root, val) {
let n = null;
trave(root);
return n;
function trave(root){
if(root == null) return;
if(root.val>val){
trave(root.left)
}else if(root.val<val){
trave(root.right)
}else{
n = root;
}
}
};
今天的力扣刷题就分享到这里,感谢大家的阅读~