echo

任生命穿梭 时间的角落

0%

二叉搜索树中的插入操作

701. 二叉搜索树中的插入操作

给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。

例如,

1
2
3
4
5
6
7
8
9
给定二叉搜索树:

4
/ \
2 7
/ \
1 3

和 插入的值: 5

你可以返回这个二叉搜索树:

1
2
3
4
5
     4
/ \
2 7
/ \ /
1 3 5

或者这个树也是有效的:

1
2
3
4
5
6
7
     5
/ \
2 7
/ \
1 3
\
4

提示:

  • 给定的树上的节点数介于 010^4 之间
  • 每个节点都有一个唯一整数值,取值范围从 010^8
  • -10^8 <= val <= 10^8
  • 新值和原始二叉搜索树中的任意节点值都不同

我们把要插入的结点和根结点的值比较:

  • 比根节点值大,如果根节点右子结点为空,直接将其插入到根节点的右子结点;如果根节点右子结点不为空,将根节点右子结点设为根节点,重复执行上述操作。
  • 比根节点值小,如果根节点左子结点为空,直接将其插入到根节点的左子结点;如果根节点左子结点不为空,将根节点左子结点设为根节点,重复执行上述操作。

方法一:递归

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null){
return new TreeNode(val);
}
if(val > root.val){
root.right = insertIntoBST(root.right, val);
}else{
root.left = insertIntoBST(root.left, val);
}
return root;
}
}

方法二:迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null){
return new TreeNode(val);
}
TreeNode pos = root;
while(pos != null){
if(val > pos.val){
if(pos.right == null){
pos.right = new TreeNode(val);
break;
}else{
pos = pos.right;
}
}else{
if(pos.left == null){
pos.left = new TreeNode(val);
break;
}else{
pos = pos.left;
}
}
}
return root;
}
}