螺旋遍历二叉树指的是,先从左往右层序打印第一层,然后从右往左层序打印第二层,再从左往右层序打印第三层,再从右往左层序打印第四层,。。。
思路:可以用两个栈来做。
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();
}
}
}
本文介绍了一种螺旋遍历二叉树的方法,即按层序打印节点但每层的打印方向交替变化。通过使用两个栈来实现这一过程,使得算法简洁高效。

228

被折叠的 条评论
为什么被折叠?



