在线编程--层次打印二叉树
2016-05-13 08:31
295 查看
题目信息:
有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。
有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。
import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }*/ public class TreePrinter { public int[][] printTree(TreeNode root) { // write code here TreeNode last=root; TreeNode nlast=root; LinkedList<TreeNode> queue=new LinkedList<TreeNode>(); //设置队列,层次遍历二叉树 List<List<Integer>> lists=new ArrayList<List<Integer>>(); //存储二叉树信息 queue.add(root); List<Integer> list=new ArrayList<Integer>(); while(!queue.isEmpty()){ TreeNode node=queue.poll(); list.add(node.val); //取出队列头的值存入数组中 if(node.left!=null){ queue.add(node.left); nlast=node.left; //nlast表示下一行的节点,nlast一直往后走,直到走到该行的最后一个 } if(node.right!=null){ queue.add(node.right); nlast=node.right; } if(node==last){ //表示进行到最后一个,也就是说该行的节点遍历完毕,进行下一行 lists.add(list); list=new ArrayList<Integer>(); last=nlast; } } int n=lists.size(); int[][] res=new int []; for(int i=0;i<n;i++){ res[i]=new int[lists.get(i).size()]; for(int j=0;j<res[i].length;j++){ res[i][j]=lists.get(i).get(j); } } return res; } }
相关文章推荐
- Java关键字
- myeclipse更换主题
- LeetCode 150. Evaluate Reverse Polish Notation
- JAR File Specification
- Google Map 符号
- Yii 2.0鉴权之访问控制过滤器(Yii2.0 Authorization By ACF)
- c#
- GPU 编程与CG 语言之阳春白雪下里巴人——CG学习读书笔记之数学函数(三)
- C#在运行时更新状态栏信息
- java基础---->Java中图片的缩放
- Java8 随笔记录(一)
- Python 依赖库
- 第7周 C语言程序设计(新2版) 练习1-21 空格串替换为最小数目的空格和制表符
- C#使用任务栏的状态区
- c语言支持的正则表达式
- Java Serializable(序列化) 第一部分
- 第7周 C语言程序设计(新2版) 练习1-20 制表符换成适当数目空格
- C语言排序和查找
- Java Web中重新定向的两种方式
- 关于串口编程的(一)