爱问知识人 爱问教育 医院库

拜求一个构建一棵二叉树并实现先序遍历、中序遍历、后序遍历的C语音程序!!!

首页

拜求一个构建一棵二叉树并实现先序遍历、中序遍历、后序遍历的C语音程序!!!


        

提交回答

全部答案

    2018-10-24 01:47:24
  •   #include 
    #include
    #include
    #include
    #include
    #define SIZE 100
    using namespace std;
    typedef struct BiTNode //定义二叉树节点结构
    {
    char data; //数据域
    struct BiTNode *lchild,*rchild; //左右孩子指针域
    }BiTNode,*BiTree;
    int visit(BiTree t);
    void CreateBiTree(BiTree &T); //生成一个二叉树
    void PreOrder(BiTree); //递归先序遍历二叉树
    void InOrder(BiTree); //递归中序遍历二叉树
    void PostOrder(BiTree); //递归后序遍历二叉树
    //主函数
    void main()
    {
    BiTree T;
    char j;
    int flag=1;
    //---------------------程序解说-----------------------
    printf("本程序实现二叉树的操作。
       ");
    printf("叶子结点以空格表示。 ");
    printf("可以进行建立二叉树,递归先序、中序、后序遍历等操作。 ");
    //----------------------------------------------------
    printf(" ");
    printf("请建立二叉树。
       ");
    printf("建树将以三个空格后回车结束。 ");
    printf("例如:1 2 3 4 5 6 (回车) "); CreateBiTree(T); //初始化队列
    getchar();
    while(flag)
    {
    printf(" ");
    printf("请选择: ");
    printf("1。
      递归先序遍历 ");
    printf("2。递归中序遍历 ");
    printf("3。递归后序遍历 ");
    printf("0。
      退出程序 ");
    scanf(" %c",&j);
    switch(j)
    {
    case '1':if(T)
    {
    printf("递归先序遍历二叉树:");
    PreOrder(T);
    printf(" ");
    }
    else printf("二叉树为空! ");
    break;
    case '2':if(T)
    {
    printf("递归中序遍历二叉树:");
    InOrder(T);
    printf(" ");
    }
    else printf("二叉树为空! ");
    break;
    case '3':if(T)
    {
    printf("递归后序遍历二叉树:");
    PostOrder(T);
    printf(" ");
    }
    else printf("二叉树为空! ");
    break;
    default:flag=0;printf("程序运行结束,按任意键退出! ");
    }
    }
    }
    //建立二叉树
    void CreateBiTree(BiTree &T)
    {
    char ch;
    scanf("%c",&ch); //读入一个字符
    if(ch==' ') T=NULL;
    else
    {
    T=(BiTNode *)malloc(sizeof(BiTNode)); //生成一个新结点
    T->data=ch;
    CreateBiTree(T->lchild); //生成左子树
    CreateBiTree(T->rchild); //生成右子树
    }
    }
    //先序遍历的递归
    void PreOrder(BiTree T)
    {
    if(T)
    {
    printf("%c ",T->data); //访问结点
    PreOrder(T->lchild); //遍历左子树
    PreOrder(T->rchild); //遍历右子树
    }
    }
    //中序遍历的递归
    void InOrder(BiTree T)
    {
    if(T)
    {
    InOrder(T->lchild); //遍历左子树
    printf("%c ",T->data); //访问结点
    InOrder(T->rchild); //遍历右子树
    }
    }
    //后序遍历的递归
    void PostOrder(BiTree T)
    {
    if(T)
    {
    PostOrder(T->lchild); //遍历左子树
    PostOrder(T->rchild); //访问结点
    printf("%c ",T->data); //遍历右子树
    }
    }
    int visit(BiTree T)
    {
    if(T)
    {
    printf("%c ",T->data);
    return 1;
    }
    else
    return 0;
    }。

    孙***

    2018-10-24 01:47:24

类似问题

换一换

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 176-195
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):