- 树结点: 数据域 & 双亲域 & id标识.
- 树结点的id标识就是树结点的存储下标.
- 修改数据域数据类型则需要修改部分代码使兼容.
- 树结点按层序序列存储
- 树结点从下标1开始存储, 即下标0不做存储.
-
输入字符串生成与其对应的树 (例如 A BC D EF GHI J ^ ^ ^ ^ ^)
A的孩子BC, 则 A BC
B的孩子D, 则 A BC D
C的孩子EF, 则 A BC D EF
D的孩子GHI, 则 A BC D EF GHI
E的孩子J, 则 A BC D EF GHI J
FGHIJ都没有孩子, 所以 A BC D EF GHI J ^ ^ ^ ^ ^
- main.c
#include#include #include "ParentTree.h" #define STR_MAXSIZE 1024 void PrintMenu(void); void ClearStdin(void); void Init_Test(PTree *T); void Create_Test(PTree *T); void PrintTable_Test(const PTree *T); void Clear_Test(PTree *T); void Destroy_Test(PTree *T); void Empty_Test(const PTree *T); void Degree_Test(const PTree *T); void Depth_Test(const PTree *T); void Root_Test(const PTree *T); void Value_Test(PTree *T); void Order_Data_Test(const PTree *T); void Assign_Data_Test(PTree *T); void Assign_Id_Test(PTree *T); void ChildValue_Data_Test(PTree *T); void ChildValue_Id_Test(PTree *T); void Sibling_Data_Test(PTree *T); void Sibling_Id_Test(PTree *T); void ChildCount_Data_Test(const PTree *T); void ChildCount_Id_Test(const PTree *T); void ChildSeat_Data_Test(PTree *T); void ChildSeat_Id_Test(PTree *T); void InsertChild_Data_Test(PTree *T); void InsertChild_Id_Test(PTree *T); void InsertTree_Data_Test(PTree *T); void InsertTree_Id_Test(PTree *T); void DeleteTree_Data_Test(PTree *T); void DeleteTree_Id_Test(PTree *T); void PrintMenu(void) { system("cls"); puts("0. Exit n"); puts("1. InitTree n"); puts("2. CreateTree n"); puts("3. PrintTreeTable n"); puts("4. ClearTree n"); puts("5. DestroyTree n"); puts("6. EmptyTree n"); puts("7. TreeDegree n"); puts("8. TreeDepth n"); puts("9. Root n"); puts("10. Value n"); puts("11. Order_Data n"); puts("12. Assign_Data n"); puts("13. Assign_Id n"); puts("14. ChildValue_Data n"); puts("15. ChildValue_Id n"); puts("16. Sibling_Data n"); puts("17. Sibling_Id n"); puts("18. ChildCount_Data n"); puts("19. ChildCount_Id n"); puts("20. ChildSeat_Data n"); puts("21. ChildSeat_Id n"); puts("22. InsertChild_Data n"); puts("23. InsertChild_Id n"); puts("24. InsertTree_Data n"); puts("25. InsertTree_Id n"); puts("26. DeleteTree_Data n"); puts("27. DeleteTree_Id n"); printf("Input: "); } void ClearStdin(void) { char ch; while(ch=getchar(), ch!='n'); } void Init_Test(PTree *T) { system("cls"); Size_T n; printf("Input n: "); scanf("%u", &n); ClearStdin(); if(InitTree_P(T, n)) puts("Error. "); else puts("Ok. "); system("pause"); } void Create_Test(PTree *T) { system("cls"); TElemType_P ch, str[STR_MAXSIZE]; printf("Input str: "); for(Size_T i=0; i


