剑指offer——把二叉树打印成多行
2016-07-19 20:48
316 查看
题目描述:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:
用一个队列保存需要打印的结点,另外需要定义两个变量,一个表示当前层已经打印的结点数,另一个表示当前层需要打印的总数。当两个变量相等时,表明当前层打印完毕,进入下一层。代码实现:
import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> resultList = new ArrayList<ArrayList<Integer>>(); if(pRoot==null) return resultList; int nextNum = 0;//当前层已经打印的数量 int toBePrint = 1; //当前需要打印的数量 Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>(); //创建一个队列保存遍历的顺序 nodeQueue.add(pRoot); ArrayList<Integer> result = new ArrayList<Integer>(); while(!nodeQueue.isEmpty()){ TreeNode curNode = nodeQueue.poll(); result.add(curNode.val); nextNum++; if(curNode.left!=null) nodeQueue.add(curNode.left); if(curNode.right!=null) nodeQueue.add(curNode.right); //判断一行的元素是否都添加到result中 if(nextNum ==toBePrint){ resultList.add(result); toBePrint = nodeQueue.size(); nextNum =0; result = new ArrayList<Integer>(); } } return resultList; } }
相关文章推荐
- 《剑指offer》最小的K个数
- 前端框架集中营
- jQuery 之 获取并设置 CSS 类(十)
- 《剑指offer》数组中出现次数超过一半的数字
- 用angular把页面中的元素按照页面分离开
- angular用ng-repeat批量处理数据
- 《剑指offer》字符串的排列
- JavaScript基础知识整理
- angular的切换页面
- 回看JSP——解决提交form表单出现的乱码问题
- JSP注释格式
- HTML5编辑API之Range对象
- PHP文件数据传输用jQuery-ajax进行浏览器->服务器->数据文件->服务器->浏览器的数据传输($_POST,$_GET,json_encode(数组数据回应),json数据解析)
- yeoman-bower-grunt之间的关系
- fck实现htm在线编辑
- js实现ajax
- [Leetcode]289. Game of Life
- child伪类选择符入门(2)
- iOS之 改变日期显示样式
- 一个初级的前端工程师需要知道些什么?