您的位置:首页 > 编程语言 > C语言/C++

二叉树前序、中序、后序非递归遍历实现(C语言)

2017-05-27 17:58 459 查看
一、非递归前序遍历

void TreversePreorder(struct BTree *T)
{
struct BTree *stack[1000],*p=T;
int top=0;
while(p||top)
{
if(p)
{
printf("%d ",p->data);
stack[top++]=p;
p=p->left;
}
else
{
p=stack[--top];
p=p->right;
}
}
}


二、非递归中序遍历

void TreverseInorder(struct BTree *T)
{
struct BTree *stack[1000],*p=T;
int top=0;
while(p||top)
{
if(p)
{
stack[top++]=p;
p=p->left;
}
else
{
p=stack[--top];
printf("%d ",p->data);
p=p->right;
}
}
}


三、非递归后序遍历

void TreversePostorder(struct BTree *T)
{
struct BTree *stack[1000],*p=T,*r=NULL;
int top=0;
while(p||top)
{
if(p)
{
stack[top++]=p;
p=p->left;
}
else
{
p=stack[top-1];
if(p->right&&p->right!=r)//判断右子树,不为空且未被访问则需要先遍历
{
p=p->right;
stack[top++]=p;//当前右子树压栈
p=p->left;
}
else//右子树为空,则直接访问
{
p=stack[--top];
printf("%d ",p->data);
r=p;//r保存节点
p=NULL;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐