开发者社区> 问答> 正文

1:采用二叉链表作为存储结构,完成二叉树的建立算法、二叉树的后序递归遍历算法和先序非递归遍历的算法。

急急急急急急急急急急急急急急急

展开
收起
知与谁同 2018-07-18 18:48:06 3254 0
2 条回答
写回答
取消 提交回答
  • 用什么语言做。
    2019-07-17 22:55:08
    赞同 展开评论 打赏
  • 算法如下:
    #include "stdio.h"
    #include "malloc.h"
    #define ELEMTYPE char
    typedef struct BiTNode
    { ELEMTYPE data;
    struct BiTNode *lchild,*rchild;
    } BiTNode;
    BiTNode *bulid() /*建树*/
    { BiTNode *q;
    BiTNode *s[20];
    int i,j;
    char x;
    printf("请按顺序输入二叉树的结点以输入0和*号结束\n");
    printf("请输入你要输入的为第几个结点i=\n");
    scanf("%d",&i);
    printf("请输入你要输入该结点的数为x=");
    getchar();
    scanf("%c",&x);
    while(i!=0&&x!='*')
    {q=(BiTNode*)malloc(sizeof(BiTNode));
    q->data=x;
    q->rchild=NULL;
    q->lchild=NULL;
    s[i]=q;

    if(i!=1)
    { j=i/2;
    if(i%2==0)
    s[j]->lchild=q;
    else
    s[j]->rchild=q;
    }

    printf("请输入你要输入的为第几个结点x=\n");
    scanf("%d",&i);
    printf("请输入你要输入该结点的数x=");
    getchar();
    scanf("%c",&x);
    }
    return s[1];
    }
    void preoder(BiTNode *bt) /*先序遍历*/
    { if(bt!=NULL)
    {
    printf("%c\n",(bt->data));

    preoder(bt->lchild);

    preoder(bt->rchild);
    }
    }
    void InOrder(BiTNode *bt) /*中序遍历*/
    { if(bt!=NULL)
    { InOrder(bt->lchild);
    printf("%c\n",bt->data);
    InOrder(bt->rchild);
    }
    }
    void postOrder(BiTNode *bt) /*后序遍历*/
    { if(bt!=NULL)
    { postOrder(bt->lchild);
    postOrder(bt->rchild);
    printf("%c\n",bt->data);
    }
    }

    main()
    { int a;
    BiTNode *bt;
    bt=bulid();
    k1: printf("需要先序遍历输出请输入1,中序遍历请输入2,后序遍历请输入3,结束输入0:");
    scanf("%d",&a);
    switch(a)
    {
    case(1): preoder(bt); goto k1;
    case(2): InOrder(bt); goto k1;
    case(3): postOrder(bt); goto k1;
    case(0): break;
    }
    }
    2019-07-17 22:55:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载