diff --git a/_04.树/02二叉树链式结构实现_BiTreeLink.c b/_04.树/02二叉树链式结构实现_BiTreeLink.c new file mode 100644 index 0000000..3809d1a --- /dev/null +++ b/_04.树/02二叉树链式结构实现_BiTreeLink.c @@ -0,0 +1,211 @@ +#include "string.h" +#include "stdio.h" +#include "stdlib.h" +#include "io.h" +#include "math.h" +#include "time.h" + +#define OK 1 +#define ERROR 0 +#define TRUE 1 +#define FALSE 0 + +#define MAXSIZE 100 /* 洢ռʼ */ + +typedef int Status; /* StatusǺ,ֵǺ״̬룬OK */ + +/* ڹ********************************** */ +int index=1; +typedef char String[24]; /* 0ŵԪŴij */ +String str; + +Status StrAssign(String T,char *chars) +{ + int i; + if(strlen(chars)>MAXSIZE) + return ERROR; + else + { + T[0]=strlen(chars); + for(i=1;i<=T[0];i++) + T[i]=*(chars+i-1); + return OK; + } +} +/* ************************************************ */ + +typedef char TElemType; +TElemType Nil=' '; /* ַԿոΪ */ + +Status visit(TElemType e) +{ + printf("%c ",e); + return OK; +} + +typedef struct BiTNode /* ṹ */ +{ + TElemType data; /* */ + struct BiTNode *lchild,*rchild; /* Һָ */ +}BiTNode,*BiTree; + + +/* նT */ +Status InitBiTree(BiTree *T) +{ + *T=NULL; + return OK; +} + +/* ʼ: Tڡ: ٶT */ +void DestroyBiTree(BiTree *T) +{ + if(*T) + { + if((*T)->lchild) /* */ + DestroyBiTree(&(*T)->lchild); /* */ + if((*T)->rchild) /* Һ */ + DestroyBiTree(&(*T)->rchild); /* Һ */ + free(*T); /* ͷŸ */ + *T=NULL; /* ָ븳0 */ + } +} + +/* ǰнֵһַ */ +/* #ʾʾT */ +void CreateBiTree(BiTree *T) +{ + TElemType ch; + + /* scanf("%c",&ch); */ + ch=str[index++]; + + if(ch=='#') + *T=NULL; + else + { + *T=(BiTree)malloc(sizeof(BiTNode)); + if(!*T) + exit(OVERFLOW); + (*T)->data=ch; /* ɸ */ + CreateBiTree(&(*T)->lchild); /* */ + CreateBiTree(&(*T)->rchild); /* */ + } + } + +/* ʼ: T */ +/* : TΪն,򷵻TRUE,FALSE */ +Status BiTreeEmpty(BiTree T) +{ + if(T) + return FALSE; + else + return TRUE; +} + +#define ClearBiTree DestroyBiTree + +/* ʼ: Tڡ: T */ +int BiTreeDepth(BiTree T) +{ + int i,j; + if(!T) + return 0; + if(T->lchild) + i=BiTreeDepth(T->lchild); + else + i=0; + if(T->rchild) + j=BiTreeDepth(T->rchild); + else + j=0; + return i>j?i+1:j+1; +} + +/* ʼ: Tڡ: Tĸ */ +TElemType Root(BiTree T) +{ + if(BiTreeEmpty(T)) + return Nil; + else + return T->data; +} + +/* ʼ: TڣpָTij */ +/* : pֵָ */ +TElemType Value(BiTree p) +{ + return p->data; +} + +/* pָ㸳ֵΪvalue */ +void Assign(BiTree p,TElemType value) +{ + p->data=value; +} + +/* ʼ: T */ +/* : ǰݹT */ +void PreOrderTraverse(BiTree T) +{ + if(T==NULL) + return; + printf("%c",T->data);/* ʾݣԸΪԽ */ + PreOrderTraverse(T->lchild); /* */ + PreOrderTraverse(T->rchild); /* */ +} + +/* ʼ: T */ +/* : ݹT */ +void InOrderTraverse(BiTree T) +{ + if(T==NULL) + return; + InOrderTraverse(T->lchild); /* */ + printf("%c",T->data);/* ʾݣԸΪԽ */ + InOrderTraverse(T->rchild); /* */ +} + +/* ʼ: T */ +/* : ݹT */ +void PostOrderTraverse(BiTree T) +{ + if(T==NULL) + return; + PostOrderTraverse(T->lchild); /* Ⱥ */ + PostOrderTraverse(T->rchild); /* ٺ */ + printf("%c",T->data);/* ʾݣԸΪԽ */ +} + + +int main() +{ + int i; + BiTree T; + TElemType e1; + InitBiTree(&T); + + + StrAssign(str,"ABDH#K###E##CFI###G#J##"); + + CreateBiTree(&T); + + printf("ն,շ%d(1: 0:) =%d\n",BiTreeEmpty(T),BiTreeDepth(T)); + e1=Root(T); + printf("ĸΪ: %c\n",e1); + + printf("\nǰ:"); + PreOrderTraverse(T); + printf("\n:"); + InOrderTraverse(T); + printf("\n:"); + PostOrderTraverse(T); + ClearBiTree(&T); + printf("\n,շ%d(1: 0:) =%d\n",BiTreeEmpty(T),BiTreeDepth(T)); + i=Root(T); + if(!i) + printf("գ޸\n"); + + return 0; +} + diff --git a/_04.树/_b.二叉树链式结构.c b/_04.树/_b.二叉树链式结构.c new file mode 100644 index 0000000..db2551a --- /dev/null +++ b/_04.树/_b.二叉树链式结构.c @@ -0,0 +1,45 @@ +/* + * @Author: Xu Bai + * @Date: 2019-07-13 22:24:04 + * @LastEditors: Xu Bai + * @LastEditTime: 2019-07-13 22:29:40 + */ +#include "string.h" +#include "stdio.h" +#include "stdlib.h" +#include "io.h" + +#define OK 1 +#define ERROR 0 +#define TRUE 1 +#define FALSE 0 +#define MAXSIZE 100 + +typedef int Status; + +/* ڹ********************************** */ +int index = 1; +/*0ŵԪŴij */ +typedef char String[24]; +String str; + +Status StrAssign(String T, char *chars) +{ + int i; + if (strlen(chars) > MAXSIZE) + { + return ERROR; + } + else + { + T[0] = strlen(chars); + for (i = 2; i <= T[0]; i++) + { + T[i] = *(chars + i - 1); + } + return OK; + } +} +/* ************************************************ */ + +