树
二叉搜索树中的插入操作
1. 题目描述
难易度:中等
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。
例如,
给定二叉搜索树:
4
/ \
2 7
/ \
1 3
和 插入的值: 5
你可以返回这个二叉搜索树:
4
/ \
2 7
/ \ /
1 3 5
或者这个树也是有效的:
5
/ \
2 7
/ \
1 3
\
4
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree
2. 思路分析
首先,插入的节点最终位置一定是在叶子节点处,则只需要在叶子结点处找到合适位置即可。即节点的left和right域为空的位置,当然也可以插入到其他位置,但此种方式容易实现
当val大于当前节点的值时则插入右子树
当val小于当前节点的值时则插入左子树
具体过程看代码注释
3. 代码演示
public class Solution {
public TreeNode
insertIntoBST(TreeNode root
, int val
) {
if (root
== null
) {
return new TreeNode(val
);
}
TreeNode node
= root
;
while (true) {
if (val
> node
.val
) {
if (node
.right
== null
) {
node
.right
= new TreeNode(val
);
return root
;
} else {
node
= node
.right
;
}
} else {
if (node
.left
== null
) {
node
.left
= new TreeNode(val
);
return root
;
} else {
node
= node
.left
;
}
}
}
}
}
class TreeNode {
int val
;
TreeNode left
;
TreeNode right
;
TreeNode() {
}
TreeNode(int val
) {
this.val
= val
;
}
TreeNode(int val
, TreeNode left
, TreeNode right
) {
this.val
= val
;
this.left
= left
;
this.right
= right
;
}
}