感觉自己的代码还算少的。
就是把树分层。具体注释如下。

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

};