感觉自己的代码还算少的。
就是把树分层。具体注释如下。
class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>> v,tempv; //最后的返回值 vector<int> vec; //临时存放每一层节点的值 queue<TreeNode *> q; //队列 int pos,len; if(pRoot==NULL) return v; q.push(pRoot); while(!q.empty()) { pos=0; len=q.size(); //每一层的节点数量 while(pos++<len) //把树分层,其实和按每一层输出树的节点是一样的 { TreeNode *root=q.front(); q.pop(); vec.push_back(root->val); if(root->left!=NULL) q.push(root->left); if(root->right!=NULL) q.push(root->right); } v.push_back(vec); vec.clear(); } for(int i=0;i<v.size();i++) //输出方式有所改变 { if((i+1)%2==1)//(i+1)为奇数,从左到右输出;为偶数,从右到左输出 tempv.push_back(v[i]); else //如果是偶数就逆序输出 { vec.clear(); for(int j=v[i].size()-1;j>=0;j--) { vec.push_back(v[i][j]); } tempv.push_back(vec); } } return tempv; } };