采用编程之美书上的解法,转化成java实现,调试通过。
这个代码基本是照着书本的思想写的,就是用容器数组类这样的一个数据结构,比使用队列简单多了,单纯的使用队列的话,会繁琐一些。这个程序很精炼。
import java.util.*;
class Tode{
int data;
Tode lchild;
Tode rchild;
Tode(int a)
{
data=a;
lchild=null;
rchild=null;
}
}
public class PrintNodeByLevel{
static Tode root=null;
static Tode creatTree(Tode root)
{
Scanner in=new Scanner(System.in);
int a=in.nextInt();
if(a==0){
return null ;
}
else{
root=new Tode(a);
root.lchild=creatTree(root.lchild);
root.rchild=creatTree(root.rchild);
return root;
}
}
static void printInOrder(Tode root){
if(root==null)
return;
else{
System.out.println(root.data);
printInOrder(root.lchild);
printInOrder(root.rchild);
}
}
static void printByOrder(Tode root){
if(root==null) return;
List<Tode> list=new ArrayList<Tode>();
//初始化
list.add(root);
int cur=0;
int last=1;
while(cur<last){
while(cur<last){
System.out.print(list.get(cur).data+" ");//访问节点
if(list.get(cur).lchild!=null)
list.add(list.get(cur).lchild);
if(list.get(cur).rchild!=null)
list.add(list.get(cur).rchild);
cur++;
}
System.out.println();//访问该层结束,输出换行符
last=list.size();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Tode node=null;
Tode root=creatTree(node);
printInOrder(root);//前序遍历结果,方法名起成中序了,晕死
printByOrder(root);//按层次打印出节点顺序。
}
}