递归的构造函数 实在不知道怎么往里面传值,硬是构造不起来! 以下程序编译没错 运行有错 请帮我修改下 要求: 要求:从控制台输入一行扩展二叉树的字符串(之后会做成图形界面,从文本框得到字符串),然后根据这个字符串构造二叉树。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);
}}
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);
}}
解决方案 »
- 新人求助~·一个关于JAVA图形界面小程序中的BUG~·~·本人在线等着~·
- 几道JAVA笔试题
- js验证,等着呢
- 一个小问题啊 弄好的话总分150分都给您!!进来看看!!!
- 请问哪里可以下载到期<<thinking in java>>英文第三版PDF格式的电子书?
- 2道期末考试题。忘各位高手帮忙,不胜感激!谢谢。
- 关于String的一个奇怪问题,
- 定义三维数组时,出现java.lang.OutOfMemoryError 问: 如何调整JVM的内存大小?
- 如何得到一个文件夹的大小,并知道所在盘符的剩余空间
- SSM项目在原有的基础上我整合了shiro,因为想做按钮的过滤,可是报了错误。求解!
- 如何使java图形用户界面窗口点击关闭按钮时不关闭窗口???
- 求助tomcat报错java.sql.SQLException: ORA-00942: 表或视图不存在
LZ你参考下哈
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;
}
看下方法,这个是构造二叉树
剩下的自己写吧