32-2 分行从上到下打印二叉树
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
分析
有两种容易想到的方法都可以解决这个问题
第一个是额外再增加一个辅助栈,将当前层和下一层的节点分开。
这种方法简单易行,但是会占用额外的空间,时间开销也会增大。
第二种是用标志变量,记录每一行的的节点数。本题给出的代码是法1. 法2的代码可以参考书上。 《剑指offer》 p174
代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
if (pRoot == NULL) return {};
queue<TreeNode*> q;
queue<TreeNode*> q_help;
TreeNode* read = pRoot;
q.push(read);
vector<vector<int> > ret;
while (!q.empty()) {
vector<int> ret_tmp;
while (!q.empty()) {
TreeNode* tmp = q.front();
q.pop();
ret_tmp.push_back(tmp->val);
if (tmp->left) {
q_help.push(tmp->left);
}
if (tmp->right) {
q_help.push(tmp->right);
}
}
ret.push_back(ret_tmp);
while (!q_help.empty()) {
q.push(q_help.front());
q_help.pop();
}
}
return ret;
}
};