在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);
}
}
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);
}
}
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);
}
}