從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。
/*
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>>out;
if(pRoot==NULL)
return out;
//用隊列存儲,pair中int表示二叉樹的層數,從0層開始
queue<pair<TreeNode*,int>>record;
//給隊列尾部push一個pair,也可以用make_pair(root,0)
record.push(make_pair(pRoot,0));
while(!record.empty())
{
//取出隊頭
TreeNode*node=record.front().first;
int lever=record.front().second;
//彈出對頭
record.pop();
//如果lever和out的size大小相等,則說明是一個新層,開闢空間
if(lever==out.size())
out.push_back(vector<int>());
//在相應的層後面添加元素
out[lever].push_back(node->val);
//左孩子不爲空,將左孩子放入隊列中
if(node->left!=NULL)
record.push(make_pair(node->left,lever+1));
//右孩子不爲空,將右孩子放入隊列中
if(node->right!=NULL)
record.push(make_pair(node->right,lever+1));
}
return out;
}
};