/**
 * 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;
    }
};