在BinaryNode这个类里,我搞不懂怎么把root这个node传入createTree里面去,建立二叉树没成功。在java里面,如何将root地址传入方法里面?(类似于C++的引用)     实在不明白
public class Node {
Node left;
Node right;
char data;
public Node(char data){
this.data=data;
this.left=null;
this.right=null;
}
public Node(char data,Node left,Node right){
this.data=data;
this.left=left;
this.right=right;
}
}public class BinaryTree {
Node root;
public BinaryTree(String pres,String ins){
createTree(pres,ins,root);
}


public static void main(String args[]){
String pres="ABDCEGFHI",ins="DBAEGCHFI";
BinaryTree tree = new BinaryTree(pres,ins);
tree.postOrder();
System.out.println("Succeed");
}

public String pres(String pres,int begin,int end){
System.out.println(pres.substring(begin,end+1));
return pres.substring(begin,end+1);
}
public String ins(String ins,int begin,int end){
return ins.substring(begin,end+1);
}
public void createTree(String pres,String ins,Node t){
int inpos;
String prestemp,instemp;
if(pres.length()==0)
return;
else{
t = new Node(pres.charAt(0));
inpos=0;
while(ins.charAt(inpos)!=pres.charAt(0))
inpos++;

prestemp = pres(pres,1,inpos);
instemp = ins(ins,0,inpos-1);
createTree(prestemp,instemp,t.left);

prestemp=pres(pres,inpos+1,pres.length()-1);
instemp=ins(ins,inpos+1,ins.length()-1);
createTree(prestemp,instemp,t.right);
}

}
public void visit(Node t){
if(t==null)
return;
else
System.out.println(t.data);
}
public void postOrder(){
visit(root.left);
visit(root.right);
visit(root);
}
}

解决方案 »

  1.   

    改动之后的BinaryTree 
    public class BinaryTree {    Node root;    public BinaryTree(String pres, String ins) {
            // 二叉树以返回值的方式生成,而不是通过参数传入。
            root = createTree(pres, ins);
        }    public static void main(String args[]) {        String pres = "ABDCEGFHI", ins = "DBAEGCHFI";
            BinaryTree tree = new BinaryTree(pres, ins);
            
            postOrder(tree.root);
            System.out.println("Succeed");
        }    public String pres(String pres, int begin, int end) {        System.out.println("pres:" + pres.substring(begin, end + 1));
            return pres.substring(begin, end + 1);
        }    public String ins(String ins, int begin, int end) {        System.out.println("ins:" + ins.substring(begin, end + 1));
            return ins.substring(begin, end + 1);
        }    public Node createTree(String pres, String ins) {        Node t;
            int inpos;
            String prestemp, instemp;
            if (pres.length() == 0)
                return null;
            else {
                t = new Node(pres.charAt(0));
                inpos = 0;
                while (ins.charAt(inpos) != pres.charAt(0))
                    inpos++;            prestemp = pres(pres, 1, inpos);
                instemp = ins(ins, 0, inpos-1);
                t.left = createTree(prestemp, instemp);            prestemp = pres(pres, inpos + 1, pres.length() - 1);
                instemp = ins(ins, inpos + 1, ins.length() - 1);
                t.right = createTree(prestemp, instemp);
            }        return t;
        }    public static void visit(Node t) {        if (t == null)
                return;
            else
                System.out.println(t.data);
        }    public static void postOrder(Node node) {
            // 递归调用左子结点
            if (node.left != null) {
                postOrder(node.left);
            }
            // 递归调用右子结点
            if (node.right != null) {
                postOrder(node.right);            
            }
            visit(node);
        }
    }