螺旋遍历二叉树 Spiral-order traversal

本文介绍了一种螺旋遍历二叉树的方法,即按层序打印节点但每层的打印方向交替变化。通过使用两个栈来实现这一过程,使得算法简洁高效。

螺旋遍历二叉树指的是,先从左往右层序打印第一层,然后从右往左层序打印第二层,再从左往右层序打印第三层,再从右往左层序打印第四层,。。。

思路:可以用两个栈来做。

struct Node{
	int data;
	Node* left;
	Node* right;
	Node(int d, Node*l, Node*r):data(d), left(l), right(r){}
};

void print_spiral_order(Node* root)
{
	stack<Node*> sta1, sta2;
	sta1.push(root);

	while(!sta1.empty() || !sta2.empty() ){
		while(!sta1.empty())
		{
			cout<< sta1.top()->data;
			if(sta1.top()->left)
				sta2.push(sta1.top()->left);
			if(sta1.top()->right)
				sta2.push(sta1.top()->right);
			sta1.pop();
		}

		while(!sta2.empty())
		{
			cout<< sta2.top()->data;
			if(sta2.top()->left)
				sta1.push(sta2.top()->right);
			if(sta2.top()->right)
				sta1.push(sta2.top()->left);
			sta2.pop();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值