题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
代码
/*
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) {
vector<vector<int>> result;
if (pRoot == NULL) {
return result;
}
queue<TreeNode*> nodes;
nodes.push(pRoot);
int nextLevel = 0;
int toBePrinted = 1;
// 取出队列中的元素
vector<int> data;
while (!nodes.empty()) {
TreeNode* pNode = nodes.front();
nodes.pop();
data.push_back(pNode->val);
if (pNode->left != NULL) {
// 添加进队列
nodes.push(pNode->left);
++nextLevel;
}
if (pNode->right != NULL) {
// 添加进队列
nodes.push(pNode->right);
++nextLevel;
}
--toBePrinted;
if (toBePrinted == 0) {
result.push_back(data);
toBePrinted = nextLevel;
nextLevel = 0;
data.clear();
}
}
return result;
}
};