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