日期:2014-05-20  浏览次数:20631 次

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