diff --git a/_04.树/01二叉树顺序结构实现_BiTreeArray.c b/_04.树/01二叉树顺序结构实现_BiTreeArray.c deleted file mode 100644 index daf054b..0000000 --- a/_04.树/01二叉树顺序结构实现_BiTreeArray.c +++ /dev/null @@ -1,329 +0,0 @@ -#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 /* 洢ռʼ */ -#define MAX_TREE_SIZE 100 /* */ - -typedef int Status; /* StatusǺ,ֵǺ״̬룬OK */ -typedef int TElemType; /* ͣĿǰݶΪ */ -typedef TElemType SqBiTree[MAX_TREE_SIZE]; /* 0ŵԪ洢 */ - -typedef struct -{ - int level,order; /* IJ,() */ -}Position; - -TElemType Nil=0; /* 0Ϊ */ - -Status visit(TElemType c) -{ - printf("%d ",c); - return OK; -} - -/* նTΪTǹ̶飬ı䣬ʲҪ& */ -Status InitBiTree(SqBiTree T) -{ - int i; - for(i=0;i=0;i--) /* ҵһ */ - if(T[i]!=Nil) - break; - i++; - do - j++; - while(i>=powl(2,j));/* 2jݡ */ - return j; -} - -/* ʼ: T */ -/* : T,eTĸ,OK;򷵻ERROR,e޶ */ -Status Root(SqBiTree T,TElemType *e) -{ - if(BiTreeEmpty(T)) /* T */ - return ERROR; - else - { - *e=T[0]; - return OK; - } -} - -/* ʼ: T,eTij(λ) */ -/* : شλe(,)Ľֵ */ -TElemType Value(SqBiTree T,Position e) -{ - return T[(int)powl(2,e.level-1)+e.order-2]; -} - -/* ʼ: T,eTij(λ) */ -/* : λe(,)Ľ㸳ֵvalue */ -Status Assign(SqBiTree T,Position e,TElemType value) -{ - int i=(int)powl(2,e.level-1)+e.order-2; /* 㡢תΪ */ - if(value!=Nil&&T[(i+1)/2-1]==Nil) /* ҶӸǿֵ˫Ϊ */ - return ERROR; - else if(value==Nil&&(T[i*2+1]!=Nil||T[i*2+2]!=Nil)) /* ˫׸ֵҶӣգ */ - return ERROR; - T[i]=value; - return OK; -} - -/* ʼ: T,eTij */ -/* : eTķǸ,򷵻˫,򷵻أգ */ -TElemType Parent(SqBiTree T,TElemType e) -{ - int i; - if(T[0]==Nil) /* */ - return Nil; - for(i=1;i<=MAX_TREE_SIZE-1;i++) - if(T[i]==e) /* ҵe */ - return T[(i+1)/2-1]; - return Nil; /* ûҵe */ -} - - -/* ʼ: T,eTij */ -/* : eӡe,򷵻أգ */ -TElemType LeftChild(SqBiTree T,TElemType e) -{ - int i; - if(T[0]==Nil) /* */ - return Nil; - for(i=0;i<=MAX_TREE_SIZE-1;i++) - if(T[i]==e) /* ҵe */ - return T[i*2+1]; - return Nil; /* ûҵe */ -} - -/* ʼ: T,eTij */ -/* : eҺӡeҺ,򷵻أգ */ -TElemType RightChild(SqBiTree T,TElemType e) -{ - int i; - if(T[0]==Nil) /* */ - return Nil; - for(i=0;i<=MAX_TREE_SIZE-1;i++) - if(T[i]==e) /* ҵe */ - return T[i*2+2]; - return Nil; /* ûҵe */ -} - -/* ʼ: T,eTij */ -/* : eֵܡeTӻֵ,򷵻أգ */ -TElemType LeftSibling(SqBiTree T,TElemType e) -{ - int i; - if(T[0]==Nil) /* */ - return Nil; - for(i=1;i<=MAX_TREE_SIZE-1;i++) - if(T[i]==e&&i%2==0) /* ҵeΪż(Һ) */ - return T[i-1]; - return Nil; /* ûҵe */ -} - -/* ʼ: T,eTij */ -/* : eֵܡeTҺӻֵ,򷵻أգ */ -TElemType RightSibling(SqBiTree T,TElemType e) -{ - int i; - if(T[0]==Nil) /* */ - return Nil; - for(i=1;i<=MAX_TREE_SIZE-1;i++) - if(T[i]==e&&i%2) /* ҵeΪ() */ - return T[i+1]; - return Nil; /* ûҵe */ -} - -/* PreOrderTraverse() */ -void PreTraverse(SqBiTree T,int e) -{ - visit(T[e]); - if(T[2*e+1]!=Nil) /* */ - PreTraverse(T,2*e+1); - if(T[2*e+2]!=Nil) /* */ - PreTraverse(T,2*e+2); -} - -/* ʼ: */ -/* : T */ -Status PreOrderTraverse(SqBiTree T) -{ - if(!BiTreeEmpty(T)) /* */ - PreTraverse(T,0); - printf("\n"); - return OK; -} - -/* InOrderTraverse() */ -void InTraverse(SqBiTree T,int e) -{ - if(T[2*e+1]!=Nil) /* */ - InTraverse(T,2*e+1); - visit(T[e]); - if(T[2*e+2]!=Nil) /* */ - InTraverse(T,2*e+2); -} - -/* ʼ: */ -/* : T */ -Status InOrderTraverse(SqBiTree T) -{ - if(!BiTreeEmpty(T)) /* */ - InTraverse(T,0); - printf("\n"); - return OK; -} - -/* PostOrderTraverse() */ -void PostTraverse(SqBiTree T,int e) -{ - if(T[2*e+1]!=Nil) /* */ - PostTraverse(T,2*e+1); - if(T[2*e+2]!=Nil) /* */ - PostTraverse(T,2*e+2); - visit(T[e]); -} - -/* ʼ: T */ -/* : T */ -Status PostOrderTraverse(SqBiTree T) -{ - if(!BiTreeEmpty(T)) /* */ - PostTraverse(T,0); - printf("\n"); - return OK; -} - -/* */ -void LevelOrderTraverse(SqBiTree T) -{ - int i=MAX_TREE_SIZE-1,j; - while(T[i]==Nil) - i--; /* ҵһǿս */ - for(j=0;j<=i;j++) /* Ӹ, */ - if(T[j]!=Nil) - visit(T[j]); /* ֻǿյĽ */ - printf("\n"); -} - -/* 㡢 */ -void Print(SqBiTree T) -{ - int j,k; - Position p; - TElemType e; - for(j=1;j<=BiTreeDepth(T);j++) - { - printf("%d: ",j); - for(k=1;k<=powl(2,j-1);k++) - { - p.level=j; - p.order=k; - e=Value(T,p); - if(e!=Nil) - printf("%d:%d ",k,e); - } - printf("\n"); - } -} - - -int main() -{ - Status i; - Position p; - TElemType e; - SqBiTree T; - InitBiTree(T); - CreateBiTree(T); - printf(",շ%d(1: 0:) =%d\n",BiTreeEmpty(T),BiTreeDepth(T)); - i=Root(T,&e); - if(i) - printf("ĸΪ%d\n",e); - else - printf("գ޸\n"); - printf(":\n"); - LevelOrderTraverse(T); - printf("ǰ:\n"); - PreOrderTraverse(T); - printf(":\n"); - InOrderTraverse(T); - printf(":\n"); - PostOrderTraverse(T); - printf("޸ĽIJ32"); - p.level=3; - p.order=2; - e=Value(T,p); - printf("޸ĽԭֵΪ%dֵ:50 ",e); - e=50; - Assign(T,p,e); - printf("ǰ:\n"); - PreOrderTraverse(T); - printf("%d˫Ϊ%d,ҺӷֱΪ",e,Parent(T,e)); - printf("%d,%d,ֱֵܷΪ",LeftChild(T,e),RightChild(T,e)); - printf("%d,%d\n",LeftSibling(T,e),RightSibling(T,e)); - ClearBiTree(T); - printf(",շ%d(1: 0:) =%d\n",BiTreeEmpty(T),BiTreeDepth(T)); - i=Root(T,&e); - if(i) - printf("ĸΪ%d\n",e); - else - printf("գ޸\n"); - - return 0; -} - diff --git a/_04.树/_a.二叉树顺序结构.c b/_04.树/_a.二叉树顺序结构.c index 5f9e241..4e56723 100644 --- a/_04.树/_a.二叉树顺序结构.c +++ b/_04.树/_a.二叉树顺序结构.c @@ -2,7 +2,7 @@ * @Author: Xu Bai * @Date: 2019-07-09 22:50:41 * @LastEditors: Xu Bai - * @LastEditTime: 2019-07-12 22:42:15 + * @LastEditTime: 2019-07-12 22:59:06 */ #include "stdlib.h" #include "stdio.h" @@ -15,7 +15,7 @@ #define FALSE 0 #define MAXSIZE 100 /*ڵ */ -#define MAX_TREE_SIZE +#define MAX_TREE_SIZE 100 typedef int Status; /* */ @@ -54,7 +54,7 @@ Status InitBiTree(SqBiTree T) Status CreateBiTree(SqBiTree T) { int i = 0; - printf("밴ֵint0ʾս㣬999ڵ%d\n", MAX_TREE_SIZE); + printf("밴ֵ()0ʾս㣬999%d:\n",MAX_TREE_SIZE); while (i < 10) { T[i] = i + 1; @@ -184,7 +184,7 @@ ElemType LeftChild(SqBiTree T, ElemType e) return Nil; } -ElemType RightChild(SqBiTree T, TElemType e) +ElemType RightChild(SqBiTree T, ElemType e) { int i; if (T[0] == Nil) /* */ @@ -215,7 +215,7 @@ ElemType LeftSibling(SqBiTree T, ElemType e) } /*eֵ */ -ElemType LeftSibling(SqBiTree T, ElemType e) +ElemType RightSibling(SqBiTree T, ElemType e) { int i; if (T[0] == Nil) @@ -298,3 +298,92 @@ Status PostOrderTraverse(SqBiTree T) return OK; } +/* */ +void LevelOrderTraverse(SqBiTree T) +{ + int i = MAX_TREE_SIZE; + int j; + while (T[i] != Nil) + { + /* ҵһǿյĽ */ + i--; + } + for (j = 0; j <= i; j++) + { + /* Ӹڵ𣬰 */ + if (T[j] != Nil) + { + visit(T[j]); + } + } + printf("\n"); +} + +/*㰴 */ +void Print(SqBiTree T) +{ + int j, k; + Position p; + ElemType e; + for (j = 1; j <= BiTreeDepth(T); j++) + { + printf("%d㣺", j); + for (k = 1; k <= powl(2, j - 1); k++) + { + p.level = j; + p.order = k; + e = Value(T, p); + if (e != Nil) + { + printf("%d: %d", k, e); + } + } + printf("\n"); + } +} + +int main() +{ + Status i; + Position p; + ElemType e; + SqBiTree T; + InitBiTree(T); + CreateBiTree(T); + printf(",շ%d(1: 0:) =%d\n", BiTreeEmpty(T), BiTreeDepth(T)); + i = Root(T, &e); + if (i) + printf("ĸΪ%d\n", e); + else + printf("գ޸\n"); + printf(":\n"); + LevelOrderTraverse(T); + printf("ǰ:\n"); + PreOrderTraverse(T); + printf(":\n"); + InOrderTraverse(T); + printf(":\n"); + PostOrderTraverse(T); + printf("޸ĽIJ32"); + p.level = 3; + p.order = 2; + e = Value(T, p); + printf("޸ĽԭֵΪ%dֵ:50 ", e); + e = 50; + Assign(T, p, e); + printf("ǰ:\n"); + PreOrderTraverse(T); + printf("%d˫Ϊ%d,ҺӷֱΪ", e, Parent(T, e)); + printf("%d,%d,ֱֵܷΪ", LeftChild(T, e), RightChild(T, e)); + printf("%d,%d\n", LeftSibling(T, e), RightSibling(T, e)); + ClearBiTree(T); + printf(",շ%d(1: 0:) =%d\n", BiTreeEmpty(T), BiTreeDepth(T)); + i = Root(T, &e); + if (i) + printf("ĸΪ%d\n", e); + else + printf("գ޸\n"); + + getchar(); + return OK; +} \ No newline at end of file diff --git a/a.out b/a.out index 381bffc..6be7823 100644 Binary files a/a.out and b/a.out differ