[Leetcode]二叉搜索树中的搜索&插入
第十三天了!快刷完了~!😊🛫
题目开始涉及二叉树、二叉堆等难一点的操作了,还有二叉树的调整。
做完感觉知识点掌握的更扎实了,果然温故而知新啊!
二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
例如,
1 | 给定二叉搜索树: |
在上述示例中,如果要找的值是5
,但因为没有节点值为 5
,我们应该返回 NULL
.
解题思路&题解
因为这是一颗搜索树,因此搜索功能实现起来特别简单,思路如下:
- 判断当前节点的值,相同则返回
- 判断当前节点的值与目标的值,根据大小选择左子树还是右子树
1 | func searchBST(root *TreeNode, val int) *TreeNode { |
二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
示例 1:
1 | 输入:root = [4,2,7,1,3], val = 5 |
示例 2:
1 | 输入:root = [40,20,60,10,30,50,70], val = 25 |
示例 3:
1 | 输入:root = [4,2,7,1,3,null,null,null,null,null,null], val = 5 |
提示:
- 给定的树上的节点数介于
0
和10^4
之间 - 每个节点都有一个唯一整数值,取值范围从
0
到10^8
-10^8 <= val <= 10^8
- 新值和原始二叉搜索树中的任意节点值都不同
解题思路&题解
这题感觉有点漏洞,因为这题是往一颗搜索二叉树里面插入一个数据,因此不会造成二叉树层数超标。
故思路如下:
- 用搜索的思路,查找出插入位置
- 往目标位置插入
1 | func insertIntoBST(root *TreeNode, val int) *TreeNode { |