本文目录
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##输出: