二叉树的遍历算法(递归和非递归)

来源:互联网 发布:淘宝限购在哪里设置 编辑:程序博客网 时间:2024/05/02 01:31

二叉树的遍历

1.递归实现

void PreOrder(BiTree T){    if(T!=NULL)    {        printf("%d ",T->data);        PreOrder(T->lchlid);        PreOrder(T->rchlid);    }}void InOrder(BiTree T){    if(T!=NULL)    {        InOrder(T->lchlid);        printf("%d ",T->data);        InOrder(T->rchlid);    }}void PostOrder(BiTree T){    if(T!=NULL)    {        PostOrder(T->lchlid);        PostOrder(T->rchlid);        printf("%d ",T->data);    }}

2.非递归实现

前序遍历

void _PreOrder(BiTree T){    BiTree p=T; top=-1;    Stack[++top]=p;    while(top>=0)    {        p=Stack[top--];        printf("%d ",p->data);        if(p->rchlid)   Stack[++top]=p->rchlid;        if(p->lchlid)   Stack[++top]=p->lchlid;    }}

中序遍历

void _InOrder(BiTree T){    BiTree p=T; top=-1;    while(p||top>=0)    {        if(p)        {            Stack[++top]=p;            p=p->lchlid;        }        else        {            p=Stack[top--];            printf("%d ",p->data);            p=p->rchlid;        }    }}

后序遍历

void _PostOrder(BiTree T){    BiTree p=T,r=NULL;    top=-1;    while(p||top>=0)    {        if(p)        {            Stack[++top]=p;            p=p->lchlid;        }        else        {            p=Stack[top];            if(p->rchlid&&p->rchlid!=r)            {                p=p->rchlid;            }            else            {                top--;                printf("%d ",p->data);                r=p;                p=NULL;            }        }    }}
0 0
原创粉丝点击