本题是搜索树,需要用到条件,以下是迭代和递归两种做法:
递归:
/**
* 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) {
//这是这一步的重点
//这一步是添加的操作,刚开始还不知道在哪一步添加节点
//因为如果不符合条件,不会走到这一步,前面的各种if判断都通过后
//走到当前节点为空的时候,这就是空节点位置,说明这里就是添加节点的最合适的位置
TreeNode node = new TreeNode(val);
return node;
}
if (root.val < val) {
root.right = insertIntoBST(root.right, val);
}else if (root.val > val) {
root.left = insertIntoBST(root.left, val);
}
return root;
}
}
迭代:
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if (root == null) return new TreeNode(val);
TreeNode node = root;
while (node != null) {
if (node.val > val) {
if (node.left == null) {
node.left = new TreeNode(val);
//这和下面那一步必须带上break,如果不带,这里执行结束后会从上重新循环,
//最终结果会是一直向这里面加val,最终超出内存限制
break;
}else {
node = node.left;
}
}else {
if (node.right == null) {
node.right = new TreeNode(val);
break;
}else {
node = node.right;
}
}
}
//最后要返回的是root不是node,因为这里node起到的是一个遍历的作用node = node.left;
return root;
}
}