题目描述:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路:
这道题比《剑指offer》按之字顺序打印二叉树简单一些。思路和上一道题一样,区别在于,这把是先入先出,使用队列即可。
按层次输出二叉树。
访问根节点,并将根节点入队。
当队列不空的时候,重复以下操作。
弹出一个元素。作为当前的根节点。
如果根节点有左孩子,访问左孩子,并将左孩子入队。
如果根节点有右孩子,访问右孩子,并将右孩子入队。
代码实现(c )
/*
struct treenode {
int val;
struct treenode *left;
struct treenode *right;
treenode(int x) :
val(x), left(null), right(null) {
}
};
*/
class solution {
public:
vector > print(treenode* proot) {
vector> res;
if (proot == nullptr) return res;
queue q;
q.emplace(proot);
while (!q.empty()){
vector tmp;
int size = q.size();
for (int i = 0; i < size; i){
auto cur = q.front();
q.pop();
tmp.emplace_back(cur->val);
if (cur->left) q.emplace(cur->left);
if (cur->right) q.emplace(cur->right);
}
res.emplace_back(tmp);
}
return res;
}
};
代码实现(java)
import java.util.*;
/*
public class treenode {
int val = 0;
treenode left = null;
treenode right = null;
public treenode(int val) {
this.val = val;
}
}
*/
public class solution {
arraylist > print(treenode proot) {
arraylist> layers = new arraylist>();
if (proot == null)
return layers;
deque queue = new linkedlist();
queue.offer(proot);
while (!queue.isempty()) {
arraylist layer = new arraylist();
int cur = 0, size = queue.size();
while (cur < size) {
treenode node = queue.poll();
layer.add(node.val);
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
cur ;
}
layers.add(layer);
}
return layers;
}
}