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你参考下哈