您的位置:首页 > 其它

二叉树前序遍历非递归算法

2012-12-05 17:10 232 查看
二叉树前序遍历非递归算法要用到栈。先遍历左子树,左子树全部进栈,再出栈,直到遇到有右孩子的节点,右孩子进栈。然后重复上述步骤。

// tree.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
struct Tnode
{
int data;
struct Tnode *lchild;
struct Tnode *rchild;
};
struct Snode
{
struct Tnode *node;
struct Snode *next;
};
struct stack
{
struct Snode *top;
struct Snode *bottom;
};
void CreateTree(Tnode *&root)
{
int data;
cin>>data;
if(data!=0)
{
root=(Tnode*)malloc(sizeof(Tnode));
root->data=data;
CreateTree(root->lchild);
CreateTree(root->rchild);
}
else
{
root=NULL;
}
}
void PrintTree(Tnode *root)
{
if(root!=NULL)
{
cout<<root->data<<endl;
PrintTree(root->lchild);
PrintTree(root->rchild);
}
}
void initStack(stack *s)
{
s->bottom=NULL;
s->top=NULL;
}
void push(stack *s,Tnode *tn)
{
Snode *node=(Snode*)malloc(sizeof(Snode));
node->node=tn;
node->next=s->top;
s->top=node;
}
Tnode *pop(stack *s)
{

Tnode *node=s->top->node;
s->top=s->top->next;
return node;
}
int _tmain(int argc, _TCHAR* argv[])
{
Tnode *root;
CreateTree(root);
Tnode *node=root;
stack *s=(stack*)malloc(sizeof(stack));
initStack(s);
push(s,node);
cout<<node->data<<endl;
node=node->lchild;
while (s->top!=NULL)   //先遍历左子树,在遍历右子数
{
while (node!=NULL)
{
push(s,node);
cout<<node->data<<endl;
node=node->lchild;
}
node=pop(s);
if(s->top!=NULL)
{
node=pop(s);
node=node->rchild;
push(s,node);
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: