您的位置:首页 > Web前端

剑指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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: