701.二叉搜索树中的插入操作
思路
受前面两题影响,上来直接中序遍历搜索二叉树,利用pre记录前置节点,若出现val大小合适位置,则将val插入。
后来想到更简单的方法,根据二叉树特性直接递归找到合适的插入节点即可。
代码
中序遍历
public TreeNode insertIntoBST(TreeNode root, int val) {
if (root==null) return new TreeNode(val);
Stack<TreeNode> stack=new Stack<>();
TreeNode pre=null;
TreeNode cur=root;
while (cur!=null || !stack.isEmpty()){
if (cur!=null){
stack.push(cur);
cur=cur.left;
}else {
cur=stack.pop();
TreeNode node=new TreeNode(val);
if (pre==null && val<cur.val){
cur.left=node;
break;
}
if (pre!=null){
if (pre.val<val && val<cur.val){
//第一种情况,如果cur左子树空
if (cur.left==null){
cur.left=node;
}
else{
pre.right=node;
}
break;
}
}
pre=cur;
cur=cur.right;
}
}
TreeNode node=new TreeNode(val);
if (cur==null && stack.isEmpty()) pre.right=node;
return root;
}
递归方法
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;
}