Leetcode 701、二叉搜索树的插入
二叉搜索树的特性是:left < root < right,在解题的时候要利用二叉搜索树的有序特性。题目中说明要插入的新值与当前树里面的所有值都不相同,所以不用考虑相等的情况。
1、递归
递归方法很容易就可以想到,比较当前根节点的值和要插入值的大小;
①如果,root.val > val,说明插入的节点要插入到左子树里面,所以进入下一次的递归,把val插入到左子树里面;
②如果,root.val < val,说明要插入到右子树里面,同样进入下一层递归,把val插入到右子树里面。
最后返回root。
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null) {
root = new TreeNode(val);
return root;
}
if(root.val < val) {
root.right = insertIntoBST(root.right, val);
}else if(root.val > val) {
root.left = insertIntoBST(root.left, val);
}
return root;
}
2、迭代
对于迭代来说,首先判断当前根节点是否为null,如果为空直接把val赋值给根节点,返回root;
否则需要两个节点,curr和parent,初始化的时候都指向根节点。遍历curr,比较curr.val和val的大小,做出对应的操作,parent是curr的父节点,当退出循环的时候,说明curr== null,直接比较parent.val和val的代表,得出结果。
/**
2、迭代
*/
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null) {
root = new TreeNode(val);
return root;
}
TreeNode curr = root, parent = root;
while(curr != null) {
parent = curr;
if(curr.val > val) {
curr = curr.left;
}else{
curr = curr.right;
}
}
if(parent.val > val) {
parent.left = new TreeNode(val);
}else{
parent.right = new TreeNode(val);
}
return root;
}