树
二叉搜索树中的插入操作
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;
}
}