用递归算法先序中序后序遍历二叉树-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

用递归算法先序中序后序遍历二叉树

2018-07-18 09:58:39 1726 2
用C编写的,编译能通过的,不要伪代码,给高分最好再给非递归的c.
取消 提交回答
全部回答(2)
  • 管理贝贝
    2019-07-17 22:55:44
    我有C++的不知道,能不能帮到你?
    0 0
  • boxti
    2019-07-17 22:55:44
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -1
    typedef char TElemType;
    typedef struct Btn{
    TElemType data;
    struct Btn *lchild , *rchild;
    }BTN ,*BT;
    int CreateBT(BT &T) {
    //按前序遍历规则创建二叉树,请输入结点
    //(不存在的结点用*代替),如"AB*DG***CEM**N**F*X**"
    char ch;
    getchar();
    printf("\n请输入二叉树的元素\n");
    scanf("%c",&ch);
    if(ch == '*')T = NULL;
    else {
    if(!(T = (BTN *)malloc(sizeof(BTN)))) exit(OVERFLOW);
    T->data = ch;
    CreateBT(T->lchild);
    CreateBT(T->rchild);
    }
    return OK;
    }//创建二叉树
    int PreOrderT(BT T ) {
    //前序遍历二叉树 T:打印每个结点的数据域一次且仅一次
    if (T != NULL) {
    printf("%c \n", T -> data);
    PreOrderT( T -> lchild ) ;
    PreOrderT( T -> rchild ) ;
    }
    return OK;
    }//先序遍历二叉树
    int InOrderT(BT T) {
    //后序遍历二叉树 T:打印每个结点的数据域一次且仅一次
    if (T != NULL) {
    InOrderT( T -> lchild ) ;
    printf("%c \n", T -> data);
    InOrderT( T -> rchild ) ;
    }
    return OK;
    }//后序遍历二叉树 T
    int PostOrderT(BT T) {
    //后序遍历二叉树 T:打印每个结点的数据域一次且仅一次
    if (T != NULL) {
    PostOrderT( T -> lchild ) ;
    PostOrderT( T -> rchild ) ;
    printf("%c \n", T -> data);
    }
    return OK;
    }//后序遍历二叉树 T
    BT LocateElem(BT T , TElemType e){
    //编写算法在二叉树T(二叉链表存储结构)中查找数据元素e。
    //查找成功返回结点地址;否则返回NULL
    BT s;
    if (T->data == e || T == NULL ) return (T);
    s = LocateElem ( T -> lchild, e ) ;
    if ( s != NULL ) return (s);
    else return ( LocateElem ( T -> rchild , e ) ) ;
    }//中查找数据元素e
    int BTnum(BT T){
    // 编写算法统计二叉树T(二叉链表存储结构)的结点总数
    int i=0;
    if (T != NULL) {
    InOrderT( T -> lchild ) ;
    i++;
    InOrderT( T -> rchild ) ;
    }
    return i;
    }
    int BTdepth(BT T){
    //编写算法求二叉树T(二叉链表存储结构)的深度。
    int rd,ld;
    if(!T) return 0;
    else { ld=BTdepth(T->lchild);
    rd=BTdepth(T->rchild);
    if(ld>rd) return rd+1;
    else return ld+1;
    }
    }
    /*int LevelElem(BT T,TElemType e){
    //求e在T中的层次。如果不存在,返回值为0;否则,返回值为层次。
    int rd,ld;
    if(!T) return 0;
    else
    if(e!=T->data){
    ld=BTdepth(T->lchild);
    rd=BTdepth(T->rchild);
    if(ld>rd)
    return rd+1;
    else return ld+1;
    }
    }*/
    int main(){
    BT T;
    TElemType e;
    int /*Te,*/j;
    while(j){
    printf("\n请输入你要的功能\n");
    printf("-----华丽的分割线------\n");
    printf("1:按前序遍历规则创建二叉树\n");
    printf("2:前序遍历二叉树 T\n");
    printf("3:中序遍历二叉树 T\n");
    printf("4:后序遍历二叉树 T\n");
    printf("5:查找数据元素e\n");
    printf("6:统计二叉树T的结点总数\n");
    printf("7:编写算法求二叉树T的深度\n");
    printf("0:退出程序\n");
    // printf("8:求e在T中的层次\n");
    printf("-----华丽的分割线------\n");
    scanf("%d",&j);
    switch(j){
    case 1:CreateBT(T);break;
    case 2:PreOrderT(T);break;
    case 3:InOrderT(T);break;
    case 4:PostOrderT(T);break;
    case 5:
    printf("\n请输入想要查找的元素\n");
    scanf("%c",&e);
    LocateElem(T,e);break;
    case 6: BTnum(T);
    case 7:BTdepth(T);break;
    /* case 8:
    printf("\n请输入元素\n");
    scanf("%c",&e);
    Te=LevelElem(T,e);
    printf("\n%c的层数为%d\n",e,Te);
    break;*/
    case 0:exit(1);
    }
    }
    return 0;
    }
    给分
    0 0
添加回答
相关问答

1

回答

求用C语言来表示对称二叉树递归算法

2018-07-22 17:48:48 1227浏览量 回答数 1

1

回答

二叉树的层次遍历是递归的算法吗

2018-07-20 16:59:29 2178浏览量 回答数 1

1

回答

递归程序和递归、递归算法一样吗

2018-07-19 18:54:04 974浏览量 回答数 1

1

回答

已知一棵二叉树的先根和中根遍历结果,试设计一个递归算法,恢复二叉树

2018-07-21 10:50:09 1581浏览量 回答数 1

2

回答

如何用非递归算法求二叉树的高度

2018-07-21 14:23:27 2736浏览量 回答数 2

1

回答

非递归算法求二叉树叶子节点数

2018-07-22 11:41:55 1567浏览量 回答数 1

1

回答

用C++编程 ,快速排序非递归算法

2018-07-22 14:34:00 1429浏览量 回答数 1

1

回答

数据结构试验(用C语言)建立一棵二叉树,并用递归或者非递归的算法分别用先序。中序和后序遍历、谢谢

2018-07-18 09:33:39 2239浏览量 回答数 1

1

回答

递归算法的实现

2018-07-19 19:48:32 994浏览量 回答数 1

3

回答

实现树与二叉树的转换的实现。以及树的前序、后序的递归、非递归算法,层次序的非递归算法的实现,

2018-07-16 18:19:12 2932浏览量 回答数 3
+关注
10071
文章
2994
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载