把二叉树打印成多行

Posted 奔跑的石榴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把二叉树打印成多行相关的知识,希望对你有一定的参考价值。

描述

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

示例1

输入:

{8,6,10,5,7,9,11}

返回值:

[[8],[6,10],[5,7,9,11]]


我们先来看一下广度优先搜索(BFS)

广度优先搜索就像水花一样,一圈一圈地往外扩散。


广度优先搜索(BFS)一般由队列实现,且总是按层次的顺序进行遍历,

其基本写法如下(可作模板用):

void BFS(int s) { queue<int> q; q.push(s); while(!q.empty()) { 取出队首元素top; 访问队首元素top; 将队首元素出队; 将top的下一层结点中未曾入队的结点全部入队,并设置为已入队; }}

那么这一题其实就可以套用BFS的模板,我们要做的只是设法把相同层的结点放到一起。

ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > result = new ArrayList<>(); if (pRoot==null) { return result; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(pRoot); while (queue.isEmpty()==false) { int size = queue.size(); ArrayList<Integer> temp = new ArrayList<>(); while (size--!=0) { TreeNode node = queue.poll(); temp.add(node.val); if (node.left!=null) { queue.offer(node.left); } if (node.right!=null) { queue.offer(node.right); } } result.add(new ArrayList<>(temp)); } return result; }

以上是关于把二叉树打印成多行的主要内容,如果未能解决你的问题,请参考以下文章

把二叉树打印成多行

《剑指offer》:[60]把二叉树打印成多行

剑指offer---把二叉树打印成多行

62.把二叉树打印成多行

剑指offer——把二叉树打印成多行

剑指offer——把二叉树打印成多行