java构造二叉树 问题 求高手帮忙
递归的构造函数 实在不知道怎么往里面传值,硬是构造不起来! 以下程序编译没错 运行有错 请帮我修改下  
要求:  要求:从控制台输入一行扩展二叉树的字符串(之后会做成图形界面,从文本框得到字符串),然后根据这个字符串构造二叉树。
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);
	}
}
------解决方案--------------------
http://zhangjunhd.blog.51cto.com/113473/82616
LZ你参考下哈