对于二叉搜索树,不需要遍历整棵树,不然就失去了利用其特点这一规律。
首先,当我们的根节点遍历到null值时,说明此时就是要插入节点的位置,则return new TreeNode(val)即可。
本题使用迭代法关键的一点:就是需要额外定义一个TreeNode来记录根节点,即父节点。
步骤如下:1.首先开始遍历,此步骤和递归法十分类似
if(root.val>val) root=root.left;
if (root.val<val) root=root.right;
2. 此时遍历到该插入节点的位置,需要和其父节点比较大小,决定插入左位置还是右位置。
完整代码如下:
迭代法
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root==null) return new TreeNode(val);
TreeNode newroot=root;
TreeNode pre=root;
while(root!=null){
pre=root;
if(root.val>val){
root=root.left;
}else if(root.val<val){
root=root.right;
}
}
if(pre.val>val){
pre.left=new TreeNode(val);
}else{
pre.right=new TreeNode(val);
}
return newroot;
}
}
递归法
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;
}
}