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

来源:互联网 发布:围棋软件免费下载 编辑:程序博客网 时间:2024/06/11 09:25

一、非递归前序遍历

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;            }        }    }}
阅读全文
0 0