感觉自己的代码还算少的。
就是把树分层。具体注释如下。
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;
}
};


京公网安备 11010502036488号