递归的构造函数 实在不知道怎么往里面传值,硬是构造不起来! 以下程序编译没错 运行有错 请帮我修改下 要求:  要求:从控制台输入一行扩展二叉树的字符串(之后会做成图形界面,从文本框得到字符串),然后根据这个字符串构造二叉树。THX~!`
import java.lang.Object;
import java.lang.String;
import java.lang.Math;class BiNode      //二叉树结点类
{
private Object data;
private BiNode lchild,rchild; BiNode(Object data)
{
this.data=data;
} BiNode(Object data,BiNode lchild,BiNode rchild)
{
this.data=data;
this.lchild=lchild;
this.rchild=rchild;
} public Object getData()
{
return data;
} public void setData(Object data)
{
this.data=data;
} public BiNode getlchild()
{
return lchild;
} public BiNode getrchild()
{
return rchild;
} public void setlchild(BiNode lchild)
{
this.lchild=lchild;
} public void setrchild(BiNode rchild)
{
this.rchild=rchild;
} public String toString()
{
return data.toString();
}}class BiTree                             //二叉树类
{
private BiNode root;
private int i=0;                     //用以计算
private String str="AB#D##C##";      //扩展二叉树的前序遍历 public BiTree()                       //无参构造函数
{
root=new BiNode(null,null,null);
} public void Creat(BiNode root)        //以扩展二叉树方式创建二叉树
{ char ch = str.charAt(i);
i++;
if(ch=='#')
{
//root=new BiNode(null,null,null);
root.setData(null);
return;
}
else
{
root.setData(ch);
Creat(root.getlchild());
Creat(root.getrchild());
}
} public void PreOrder(BiNode root)       //前序遍历
{
if(root.getData()==null) return;
else
{
System.out.println(root.getData());
PreOrder(root.getlchild());
PreOrder(root.getrchild());
}
} public void InOrder(BiNode root)          //中序遍历
{
if(root.getData()==null) return;
else
{ InOrder(root.getlchild());
System.out.println(root.getData());
InOrder(root.getrchild());
}
}    public void PostOrder(BiNode root)       //后序遍历
    {
if(root.getData()==null) return;
    else
{ PostOrder(root.getlchild());
System.out.println(root.getData());
PostOrder(root.getrchild());
}
} public int Depth(BiNode root)            //求二叉树深度
{
if(root.getData()==null) return 0;
else
{
int hl=Depth(root.getlchild());
int hr=Depth(root.getrchild());
return (Math.max(hl,hr))+1;
}
} public void Printleaves(BiNode root)    //打印叶子结点
{
if(root.getData()!=null)
{
if(root.getlchild()!=null&&root.getrchild()!=null)
{System.out.println(root.getData());}
Printleaves(root.getlchild());
Printleaves(root.getrchild());
}
}
}public class BiTreegui
{
public static void main(String[] args)
{
//String str="AB#D##C##";      //从控制台或文本框得到的字符串
        BiNode root=new BiNode(null);
BiTree bitree=new BiTree(); bitree.Creat(root);
bitree.PreOrder(root);
bitree.InOrder(root);
bitree.PostOrder(root);
bitree.Depth(root);
bitree.Printleaves(root);
}}

解决方案 »

  1.   

    http://zhangjunhd.blog.51cto.com/113473/82616
    LZ你参考下哈
      

  2.   

    在Creat函数中,你的参数是引用类型,当引用类型来传递的时候,其实是传递引用类型的一个副本,而不是引用本身,这和C++不同,所以你根本没有构造起这棵树来。
      

  3.   

    // 构造一棵二叉树
    public void getBinaryTree(String[] nodes) {
    this.root = (BinaryNode<T>) getBinaryTreeByPreOrder(nodes);
    } private int i = 0; private BinaryNode<String> getBinaryTreeByPreOrder(String[] nodes) {
    BinaryNode<String> node = null;
    if (i < nodes.length) {
    String tmp = nodes[i];
    i++;
    if (tmp != null) {
    node = new BinaryNode<String>(tmp);
    // System.out.println("头结点"+node);
    node.left = (BinaryNode<String>) getBinaryTreeByPreOrder(nodes);
    //System.out.println("左孩子" + node.left);
    node.right = (BinaryNode<String>) getBinaryTreeByPreOrder(nodes);
    //System.out.println("右孩子" + node.right);
    }
    }
    return node;
    }
    看下方法,这个是构造二叉树
    剩下的自己写吧