本文主要是介绍剑指offer—按之字形打印二叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
在这道题之前,我们曾遇到过将二叉树按行输出,我们可以把按行输出的数组,奇数行反向存储即可。
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;
}
这篇关于剑指offer—按之字形打印二叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!