---------------🎈🎈题目链接🎈🎈-------------------
关键点:
关键点:
二叉搜索树插入新的节点,其实就是把这个节点插入到对应的叶子结点
比如插入5: 5比4小,向右遍历到7 。5比7小,向左遍历为null,就插入在这里。
解法 递归法
时间复杂度O(N)
空间复杂度O(N)
/**
* Definition for a binary tree node.
* public 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) {
TreeNode addnode = new TreeNode(val);
return addnode;
}
if(val < root.val){ // 向左递归遍历
root.left = insertIntoBST(root.left,val);
} else{ // 向右递归遍历
root.right = insertIntoBST(root.right,val);
}
return root;
}
}
解法 迭代法
时间复杂度O(N)
空间复杂度O(N)
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
TreeNode addroot = new TreeNode(val);
TreeNode newroot = root;
if(root == null) return addroot;
while(newroot!=null){
if(val<newroot.val){ // 如果val<newroot.val,就向左找叶子结点
if(newroot.left!=null){ //不为叶子结点,就继续遍历
newroot = newroot.left;
}else{ //为叶子结点,插入并输出
newroot.left = addroot;
break;
}
} else{ // 如果val>newroot.val,就向右找叶子结点
if(newroot.right!=null){ //不为叶子结点,就继续遍历
newroot = newroot.right;
}else{ //为叶子结点,插入并输出
newroot.right = addroot;
break;
}
}
}
return root;
}
}