开发者社区> 问答> 正文

1.编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归遍历算法(前序、中序、后序)

对这棵二叉树进行遍历并计算出二叉树的高度。急!!发邮箱649489711@qq.com

展开
收起
知与谁同 2018-07-18 19:59:45 5153 0
2 条回答
写回答
取消 提交回答
  • 社区管理员
    你这个问题不对吧。任意输入二叉树的结点个数和结点值,可能能构造很多种二叉树
    2019-07-17 22:54:46
    赞同 展开评论 打赏
  • tree.h

    #include<stdio.h>
    #include<malloc.h>
    #define MAX_NODE 50
    typedef struct BiTNode
    {
    char data;
    BiTNode *lchild,*rchild;

    }BiTNode,*BiTree;
    BiTree CreateBiTree();
    void InorderTraverse( BiTree T);

    creatTree.cpp
    #include"tree.h"

    BiTree CreateBiTree()
    {

    BiTree T;
    char ch;
    scanf("%c",&ch);
    if (ch=='#')
    {
    T=NULL;
    return T;

    }

    else
    {
    T=(BiTNode *)malloc(sizeof(BiTNode));

    if (T==NULL)
    {
    printf("树创建失败!");
    T=NULL;

    return T;
    }

    T->data=ch;
    T->lchild=CreateBiTree();
    T->rchild=CreateBiTree();
    return T;
    }
    }

    InorderTraverse.cpp
    #include"tree.h"
    void InorderTraverse( BiTree T)
    {
    BiTree stack[MAX_NODE] ,p=T ;
    int top=0 , bool1=1 ;
    if (T==NULL)
    printf("Binary Tree is Empty!\n");
    else
    {
    do
    {
    while (p!=NULL)
    {
    stack[++top]=p ;
    p=p->lchild ;
    }

    if (top==0)
    {
    bool1=0 ;
    }else{
    p=stack[top] ;
    top-- ;
    printf("%c",p->data);
    p=p->rchild ;
    }
    } while (bool1!=0) ;
    }
    }

    main_fun.cpp
    #include"tree.h"
    int main()
    {

    BiTree T= CreateBiTree();
    InorderTraverse(T);
    return 0;

    }
    traverse.cpp
    #include"tree.h"
    void PreorderTraverse(BiTree T)
    {
    if (T!=NULL)
    {
    /* 访问根结点 */
    PreorderTraverse(T->lchild) ;
    printf("%c",T->data);
    PreorderTraverse(T->rchild) ;
    }
    }

    例如 输入 AB###
    输出BA
    先序输入 中序输出
    可以修改遍历方式 来改变输出结果。
    2019-07-17 22:54:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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