/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > Print(TreeNode* root) {
queue<TreeNode*>q;
vector<int>result;
q.push(root);
bool fl=false;
while(!q.empty())
{
TreeNode*k=q.front();
q.pop();
if(k!=nullptr)result.push_back(k->val);
else {
result.push_back(0xcccc);
continue;
}
q.push(k->left),q.push(k->right);
}
vector<vector<int>>ans;
int len=result.size()-1,cnt=1,present=0;
while(present<=len)
{
vector<int>temp;
int count=0;
if(!fl)
{
for(int i=0;i<cnt&&present<=len;i++)
if(result[present]!=0xcccc)temp.push_back(result[present++]);
else present++,count++;
}
else{
int ind,k=present+cnt;
if(present+cnt-1>=len)
{
cnt=len-present+1;
ind=len;
}
else ind=present+cnt-1;
present=k;
for(int i=0;i<cnt;i++)
if(result[ind]!=0xcccc)temp.push_back(result[ind--]);
else --ind,count++;
}
fl=!fl;
if(temp.size())ans.push_back(temp);
cnt-=count;
cnt*=2;
}
return ans;
}
};