把二叉树打印成多行
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;
}
以上是关于把二叉树打印成多行的主要内容,如果未能解决你的问题,请参考以下文章