剑指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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值