数据结构实验之求二叉树后序遍历和层次遍历

来源:互联网 发布:张伯伦生涯数据 编辑:程序博客网 时间:2024/04/30 00:14
#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct tnode{    char data;    tnode *lc,*rc;}*tree;void build(tree &t,char *he,char *mid,int len)  //数组用字符来代替{    if(len==0) t=NULL;  //递归停止条件    else    {        int k=0;        int n=strlen(mid);        for(;k<n;k++)      //寻找根节点        {            if(mid[k]==*he)                break;        }        t=new(tnode);        t->data=*he;        build(t->lc,he+1,mid,k);     //t->lc;  递归左子树        build(t->rc,he+k+1,mid+k+1,len-(k+1));   //t->rc;  递归右子树    }}void last(tree &t)  //后序遍历{    if(t)    {        last(t->lc);        last(t->rc);        printf("%c",t->data);    }}typedef struct qnode   //队节点{    tree data;    qnode *next;}*qtype;typedef struct        //队的定义{    qtype front,rear;}que;void QueInitial(que &q)   //队的初始化{    q.front=q.rear=new(qnode);    q.front->next=NULL;}void InQue(que &q,tree &e)     //队的插入{    qtype p;    p=new(qnode);    p->data=e;    p->next=NULL;    q.rear->next=p;    q.rear=p;}char DelQue(que &q,tree &e){    qtype p;    if(q.front==q.rear) return 0;    p=q.front->next;    e=p->data;    q.front->next=p->next;    if(q.rear==p)        q.rear=q.front;    free(p);}char QueEmpty(que &q){    if(q.front==q.rear) return 1;    else return 0;}void ceng(tree &t){    que q;    QueInitial(q);    if(t)        InQue(q,t);    while(!QueEmpty(q))    {        DelQue(q,t);        printf("%c",t->data);        if(t->lc)            InQue(q,t->lc);        if(t->rc)            InQue(q,t->rc);    }}int main(){    int n;    char he[55],mid[55];    tree t;    scanf("%d",&n);    while(n--)    {        scanf("%s %s",he,mid);        int len=strlen(he);        build(t,he,mid,len);        last(t);        printf("\n");        ceng(t);        printf("\n");    }    return 0;}

0 0
原创粉丝点击