题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
在这道题之前,我们曾遇到过将二叉树按行输出,我们可以把按行输出的数组,奇数行反向存储即可。
1.现将二叉树按行输出,用队列来实现。
最后一行zform是用来转换为之字形的函数
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > res;
queue <TreeNode *> nums;
if(pRoot !=NULL )
nums.push(pRoot );
while(!nums.empty ())
{
vector<int> temp;
int n=nums.size ();
while(n>0)
{
if(nums.front() ->left!=NULL )
nums.push(nums.front() ->left );
if(nums.front() ->right!=NULL )
nums.push(nums.front()->right );
temp.push_back (nums.front ()->val );
n--;
nums.pop();
}
res.push_back (temp);
}
res=zform(res);
return res;
}
2.将二叉树的层次遍历变为之字形
vector<vector<int> > zform(vector<vector<int> > in)
{
int n=in.size();
for(int i=0;i<n;++i)
{
if(i&1)
{
vector<int> temp;
for(int j=in[i].size()-1;j>=0;--j)
{
temp.push_back (in[i][j]);
}
in[i]=temp;
}
}
return in;
}