难度:medium
方法一:朴实迭代法
/**
* 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) {
return new TreeNode(val);
}
TreeNode node = root;
// 插入操作需要借助父节点
TreeNode parent = node;
// 定位节点插入位置
while (node != null) {
parent = node;
if (node.val < val) {
node = node.right;
} else if (node.val > val) {
node = node.left;
}
}
// 进行节点的插入
if (parent.val < val) {
parent.right = new TreeNode(val);
} else if (parent.val > val) {
parent.left = new TreeNode(val);
}
return root;
}
}
方法三:带返回值的递归
// 递归
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if (root == null) {
return new TreeNode(val);
}
if (root.val < val) {
root.right = insertIntoBST(root.right, val);
} else if (root.val > val) {
root.left = insertIntoBST(root.left, val);
}
return root;
}
}
方法三:还可以使用不带返回值的递归,但需要定义一个parent父节点来协助插入,类似方法一的操作;这里就不写了;