您的位置:首页 > Web前端

剑指offer-将二叉树打印为多行

2016-10-30 16:56 253 查看
题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

分析

利用二叉树的层次遍历;注意:此时的层次遍历需要保存单独保存每一列的数据,所以需要一个辅助队列(共两个队列)

ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if (pRoot == null) {
return result;
}

TreeNode s1 = null;
TreeNode s2 = null;

Queue<TreeNode> queue1 = new LinkedList<>();
Queue<TreeNode> queue2 = new LinkedList<>(); // 备用队列(需要画图理解)

queue1.add(pRoot);
while (!queue1.isEmpty()) {
ArrayList<Integer> list = new ArrayList<Integer>();

// 将一层的所有值放入list中(queue1的作用),清空queue1并将数据转移到queue2
while (!queue1.isEmpty()) {
s1 = queue1.poll();
queue2.add(s1);
list.add(s1.val);
}
result.add(list);

// queue2保存相当于复制没有清空的queue1,然后将下一层所有节点转给queue1
while (!queue2.isEmpty()) {
s2 = queue2.poll();
if (s2.left != null) {
queue1.add(s2.left);
}
if (s2.right != null) {
queue1.add(s2.right);
}
}
}

return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: