二叉搜索树中的搜索(递归 && 迭代)
题目描述
- 给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
例如,
给定二叉搜索树:
4
/ \
2 7
/ \
1 3
和值: 2
你应该返回如下子树:
2
/ \
1 3
在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。
题解一(递归java)
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if (root == null || val == root.val) return root;
return val < root.val ? searchBST(root.left, val) : searchBST(root.right, val);
}
}
图示
详解
- 1>.在每一次新的遍历开始之前,我们都需要判断当前的头结点是否为空或者,该头结点的值是否与题目要求的值相同
- 2>.判断当前节点的值是否小于 val , 如果小于遍历左节点,否则遍历右节点。
- 3>.最后返回的值只有两种可能:val 或 null
- 4>.在通过逐层遍历(出栈)将最终值返回即可
- 5>.返回的结果则为根节点的值为 val 的 root 的子树
Tips
二叉搜索树是一颗二叉树,每个节点都有以下特性:
- 1>.大于左子树上任意一个节点的值
- 2>.小于右子树上任意一个节点的值
该题的结果只能有唯一解,因为二叉搜索树上的节点值是按照大小排序的,理论上不会有重复的值
难点
- 掌握什么是二叉搜索树
- 掌握什么是递归
题解二(迭代java)
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
while (root != null && val != root.val)
root = val < root.val ? root.left : root.right;
return root;
}
}
图示
详解
- 进行遍历,如果该节点的值比 val 小,则把它的左节点作为新的节点开始遍历,否则将其右节点作为新的节点开始遍历。
- 2>.直到满足遍历终止条件,返回子树即可。
Tips
二叉搜索树是一颗二叉树,每个节点都有以下特性:
- 1>.大于左子树上任意一个节点的值
- 2>.小于右子树上任意一个节点的值
- 注意:这里 while 的循环语句只有一行,不要误以为 return 语句也是 while 循环的一部分。
难点
- 理解二叉搜索树
声明
- 原作者:E.L.E
- <本文章著作权归作者所有,商业转载请获得作者授权,非商业转载请注明出处>
- <欢迎大家评论>