树与图中等2 种解法
#701二叉搜索树中的插入操作
将一个不存在于树中的值插入二叉搜索树并返回根节点。
#二叉搜索树#递归#迭代
解题主线
01
沿搜索路径遇到 null 的位置就是合法插入点。
解法 1:递归插入
递归返回插入后的子树根,并回接到父节点。
时间复杂度
O(h)
空间复杂度
O(h)
java
import java.util.*;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if (root == null) return new TreeNode(val);
if (val < root.val) root.left = insertIntoBST(root.left, val);
else root.right = insertIntoBST(root.right, val);
return root;
}
}递归返回插入后的子树根,并回接到父节点。
解法 2:迭代插入
维护父节点沿搜索路径走到空位置,再创建并连接新节点。
时间复杂度
O(h)
空间复杂度
O(1)
java
import java.util.*;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if (root == null) return new TreeNode(val);
TreeNode current = root;
while (true) {
if (val < current.val) {
if (current.left == null) {
current.left = new TreeNode(val);
break;
}
current = current.left;
} else {
if (current.right == null) {
current.right = new TreeNode(val);
break;
}
current = current.right;
}
}
return root;
}
}维护父节点沿搜索路径走到空位置,再创建并连接新节点。
边界与易错点
- 题目保证值不存在,因此无需定义重复值放左还是放右。
- 空树插入后新节点就是根。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
leetcode/src/main/java/tree/Q701_insertIntoBST.java