×

遍历二叉树的三种方法代码

遍历二叉树的三种方法代码(C语言用三种不同的方法遍历二叉树并用两种方式排序)

admin admin 发表于2024-05-13 05:15:33 浏览27 评论0

抢沙发发表评论

各位老铁们好,相信很多人对遍历二叉树的三种方法代码都不是特别的了解,因此呢,今天就来为大家分享下关于遍历二叉树的三种方法代码以及C语言用三种不同的方法遍历二叉树并用两种方式排序的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

C语言用三种不同的方法遍历二叉树并用两种方式排序

以下是我的数据结构实验的作业:肯定好用,里面还包括了统计树的深度和叶子数!记住每次做完一个遍历还要重新输入你的树哦! #include "stdio.h" #include "string.h" #define NULL 0 typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree Create(BiTree T){ char ch; ch=getchar(); if(ch==’#’) T=NULL; else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) printf("Error!"); T-》data=ch; T-》lchild=Create(T-》lchild); T-》rchild=Create(T-》rchild); } return T; } void Preorder(BiTree T){ if(T){ printf("%c",T-》data); Preorder(T-》lchild); Preorder(T-》rchild); } } int Sumleaf(BiTree T){ int sum=0,m,n; if(T){ if((!T-》lchild)&&(!T-》rchild)) sum++; m=Sumleaf(T-》lchild); sum+=m; n=Sumleaf(T-》rchild); sum+=n; } return sum; } void zhongxu(BiTree T){ if(T){ zhongxu(T-》lchild); printf("%c",T-》data); zhongxu(T-》rchild); } } void houxu(BiTree T){ if(T){ houxu(T-》lchild); houxu(T-》rchild); printf("%c",T-》data); } } int Depth(BiTree T){ int dep=0,depl,depr; if(!T) dep=0; else{ depl=Depth(T-》lchild); depr=Depth(T-》rchild); dep=1+(depl》depr?depl:depr); } return dep; } main(){ BiTree T; int sum,dep; T=Create(T); Preorder(T); printf("\n"); zhongxu(T); printf("\n"); houxu(T); printf("\n"); sum=Sumleaf(T); printf("%d",sum); dep=Depth(T); printf("\n%d",dep); } 在Turbo C的环境下,先按Ctrl+F9运行程序,此时就是建立二叉树的过程,例如输入序列ABC##DE#G##F###(其中的“#”表示空,并且输入过程中不要加回车,因为回车也有对应的ASCII码,是要算字符的,但是输入完之后可以按回车退出),然后再按ALT+F5显示用户界面,这时候就能够看到结果了。 另外你必须会手动建立一棵二叉树,保证你输入的序列能构成一棵二叉树,否则你怎么输入,按最后按多少回车程序也不会结束!

c语言编程实现二叉树的三种遍历算法 并针对一个二叉树列出三种遍历序列功能要求:实现三种遍历算法、

#include 《stdio.h》#include 《malloc.h》typedef struct BTree {    char data;    struct BTree *lChild;    struct BTree *rChild;} BinTree;BinTree *CreateTree(BinTree *p) {    char ch;    scanf("%c", &ch);    if (ch==’#’) return NULL;    p = (BinTree *)malloc(sizeof(BinTree));    p-》data = ch;    p-》lChild = CreateTree(p-》lChild);    p-》rChild = CreateTree(p-》rChild);    return p;}int SumLeaf(BinTree *T) {    int sum=0, m, n;    if (T) {        if ((!T-》lChild) && (!T-》rChild))            sum++;        m = SumLeaf(T-》lChild);        n = SumLeaf(T-》rChild);        sum +=m+n;    }    return sum;}void QianXu(BinTree *T) {    if (T) {        printf("%c, ", T-》data);        QianXu(T-》lChild);        QianXu(T-》rChild);    }}void ZhongXu(BinTree *T) {    if (T) {        ZhongXu(T-》lChild);        printf("%c,", T-》data);        ZhongXu(T-》rChild);    }}void HouXu(BinTree *T) {    if (T) {        HouXu(T-》lChild);        HouXu(T-》rChild);        printf("%c,", T-》data);    }}int Depth(BinTree *T) {    int dep = 0, depl, depr;    if (!T) dep = 0;    else {        depl = Depth(T-》lChild);        depr = Depth(T-》rChild);        dep = 1+(depl》depr?depl:depr);    }    return dep;}void FreeTree(BinTree *T) {    if (T) {        FreeTree(T-》lChild);        FreeTree(T-》rChild);        free(T);    }}int main() {    BinTree *Tree = NULL;    Tree = CreateTree(Tree);    //前序遍历    printf("QianXu Traversal:");    QianXu(Tree);    printf("\nZhongXu Traversal:");    ZhongXu(Tree);    printf("\nHouXu Traversal:");    HouXu(Tree);    printf("\nLeaf’s number:%d\n", SumLeaf(Tree));    printf("Tree’s Depth:%d", Depth(Tree));    FreeTree(Tree);    return 0;}输入:#ABCD###E##FG#H##I#J##输出:

文章分享结束,遍历二叉树的三种方法代码和C语言用三种不同的方法遍历二叉树并用两种方式排序的答案你都知道了吗?欢迎再次光临本站哦!