二叉搜索树中的插入操作
题目链接:力扣题目链接
难度:中等
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
示例
输入:root = [4,2,7,1,3], val = 5
输出:[4,2,7,1,3,5]
解释:另一个满足题目要求可以通过的树是:
思路
递归:遍历二叉搜索树,找到空节点 插入元素就可以了
迭代:在迭代法遍历的过程中,需要记录一下当前遍历的节点的父节点,这样才能做插入节点的操作。
二叉树的定义
//二叉树节点的定义。
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;
}
}
递归代码
class Solution{
public TreeNode insertIntoBST(TreeNode root, int val) {
//找到空节点的位置插入新新节点
if(root == null){
return new TreeNode(val);
}
if(root.val > val){
//递归创建右子树
root.left = insertIntoBST(root.left,val);
}
if(root.val < val){
//递归创建左子树
root.right = insertIntoBST(root.right,val);
}
return root;
}
}
迭代代码
class Solution{
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null){
return new TreeNode(val);
}
TreeNode cur = root;
//需要记录上一个节点,否则无法赋值新节点
TreeNode pre = root;
while(root != null){
pre = root;
if(root.val > val){
root = root.left;
}else if(root.val < val){
root = root.right;
}
}
//此时用parent的节点进行赋值
if(pre.val > val){
pre.left = new TreeNode(val);
}else{
pre.right = new TreeNode(val);
}
return cur;
}
}