题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:使用一个数组来进行层序遍历,因为需要每一层输出一行,因此记录当前层要打印的节点数和下一层要打印的节点数
/*
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>> ret;
if(pRoot == nullptr)
return ret;
vector<TreeNode*> vec;
vec.push_back(pRoot);
int index = 0;
int curr = 1; //当前行需要打印的节点
int next = 0; //下一行需要打印的节点
while(index < vec.size()){
vector<int> tmp;
while(curr--){
tmp.push_back(vec[index]->val);
if(vec[index]->left != nullptr){
vec.push_back(vec[index]->left);
next++;
}
if(vec[index]->right != nullptr){
vec.push_back(vec[index]->right);
next++;
}
index++;
}
ret.push_back(tmp);
curr = next;
next = 0;
}
return ret;
}
};