public abstract class BTree {
int root;
BTree lchild;
BTree rchild;
abstract void insert(int val);
}
class SBTree extends BTree{
public SBTree(){
this.root = 0;
this.lchild = null;
this.rchild = null;
}
public SBTree(int val){
this.root = val;
this.lchild = null;
this.rchild = null;
} //插入运算在此。
void insert(int val){
BTree tem = this;
while(tem != null){
while(tem != null&&tem.root>=val)
tem = tem.lchild;
while(tem != null&&tem.root<val)
tem = tem.rchild;
}tem = new SBTree(val);
}

public void inorder(BTree bTree){
if(bTree == null)
return ;
inorder(bTree.lchild);
System.out.print(bTree.root+" ");
inorder(bTree.rchild);
}

public void inorder(){
inorder(this);
}

public static void main (String[] args) {
SBTree sbTree = new SBTree(0);
sbTree.lchild = new SBTree(-1);
sbTree.rchild = new SBTree(1);
                  //手动插入,遍历有效。
sbTree.inorder();

//insert(val) 操作是无效的,两次inorder()的结果一样。
for (int i = 0; i<10; i++)
sbTree.insert(i);
sbTree.inorder();
}
}

解决方案 »

  1.   

    insert(int val)函数经自己修改,可用了。哈哈
    如下:void insert(int val){
    BTree tem = this;
    while(tem.lchild != null&&tem.root>=val)
    tem = tem.lchild;
    while(tem.rchild != null&&tem.root<val)
    tem = tem.rchild;
    if(tem.root >= val)tem.lchild = new SBTree(val);
    else tem.rchild = new SBTree(val);
    }