采用编程之美书上的解法,转化成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);//按层次打印出节点顺序。 } }