按之字形顺序打印二叉树

时间:2023-01-26 17:27:28

使用两个栈。

void printTree(Node *root){
if (root==NULL)
{
return ;
}

stack<Node*> levels[2];
int current=0;
int next=1;

levels[current].push(root);
while (!levels[0].empty()||!levels[1].empty())
{
Node *p=levels[current].top();
levels[current].pop();

printf("%d ",p->data);

if (current==0)
{
//从左到右进栈
if (p->left!=NULL)
{
levels[next].push(p->left);
}
if (p->right!=NULL)
{
levels[next].push(p->right);
}
}
else
{
//从右到左进栈
if (p->right!=NULL)
{
levels[next].push(p->right);
}
if (p->left!=NULL)
{
levels[next].push(p->left);
}
}
//当一个栈为空时,换另外一个栈来使用
if (levels[current].empty())
{
printf("\n");
current=1-current;
next=1-next;
}
}
}