递归法:
首先考虑树为空的情况,只要返回一个值为val的结点即可;
当树不为空时,插入的算法为:
- 当val小于root.val,往下寻找左子树,即用root.left递归;
- 当val大于root.val(val值一定不等),往下寻找右子树,即用root.right递归;
- 直到找到一个null,说明可以在此插入值为val的结点了。
有两个地方需要去考虑,一是插入前记录父节点的位置,二是记录上一个递归是左儿子还是右儿子。父节点位置可以用一个全局变量记录一下;至于是左儿子还是右儿子可以用一个flag表示。在确定下一层是null时,把当前节点记录,并且把应插在左还是右也记录。
实现代码如下:
java
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root==null) {
TreeNode ins = new TreeNode(val);
return ins;
}
insertBST(root,val);
return root;
}
int flag=0;//全局变量,0代表左儿子,1代表右儿子
TreeNode father = new TreeNode();//全局变量记录父节点位置
public void insertBST(TreeNode root,int val) {
if(root==null) {
TreeNode ins = new TreeNode(val);
if(flag==0) {
father.left=ins;
}else {
father.right=ins;
}
return;
}
if(val<root.val) {
if(root.left==null) {
father=root;
}
insertBST(root.left,val);
}
else {
if(root.right==null) {
father=root;
flag=1;
}
insertBST(root.right,val);
}
}
}