【剑指 offer】分行从上往下打印二叉树
2019-04-13 本文已影响0人
邓泽军_3679
1、题目描述
从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印,每一层打印到一行。
样例
输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null]
8
/ \
12 2
/
6
/
4
输出:[[8], [12, 2], [6], [4]]
2、问题描述:
- 分层打印,二叉树。
3、问题关键:
- 在每层的最后做个标记,每次遍历到标记就换行。
- 队列,压入当前层所有值后,再压入一个
NULL
标记一下。 - 如果当前层遍历完,把当前层的值加入结果中,清空数组。
4、C++代码:
class Solution {
public:
vector<vector<int>> printFromTopToBottom(TreeNode* root) {
vector<vector<int>> res;
if (!root) return res;
queue<TreeNode*> q;
q.push(root);//压入第一层。
q.push(nullptr);//压入标记。
vector<int> level;
while(q.size()) {
auto t = q.front();
q.pop();
if(t) {//如果不是标记,就把值加入 数组。
level.push_back(t->val);
if(t->left) q.push(t->left);//把左右孩子加入。
if (t->right) q.push(t->right);
}
else {//遇到标记。
if (level.size()) {//判断数组是否为空,为空说明遍历完了,break就可以了。
res.push_back(level);//把当前层加入结果中。
q.push(nullptr);给下一层最后加个标记。
level.clear();//清空数组,遍历下一层。
}
else
break;
}
}
return res;
}
};