数据结构与算法-实验7-二叉树基础

 1 #define Tree_Level tree_Level(Root, 0)
 2 
 3 struct DataType
 4 {
 5     char data[9];
 6 };
 7 struct BinaryTree
 8 {
 9     DataType  Data;
10     BinaryTree* Lchild;
11     BinaryTree* Rchild;
12     int x;
13     int y;
14 };
15 
16 BinaryTree *Root=NULL;
17 
18 BinaryTree* Grow()
19 {
20     BinaryTree* Leaf;
21     Leaf = new BinaryTree;
22     Leaf->Lchild = NULL;
23     Leaf->Rchild = NULL;
24     strcpy_s(Leaf->Data.data,"\0\0\0\0\0\0\0\0\0");
25     return Leaf;
26 }
27 
28 bool tree_IsEmpty(BinaryTree* tree)
29 {
30     if (Root==NULL)
31         return 1;
32     else return 0;
33 }
34 
35 void tree_PreOrder(BinaryTree* T)
36 {
37     if (T==NULL)
38         return ;
39     else
40     {
41         printf_s("%s\n", T->Data.data);
42         tree_PreOrder(T->Lchild);
43         tree_PreOrder(T->Rchild);
44     }
45 }
46 void tree_MidOrder(BinaryTree* T)
47 {
48     if (T == NULL)
49         return;
50     else
51     {
52         tree_PreOrder(T->Lchild);
53         printf_s("%s\n", T->Data.data);
54         tree_PreOrder(T->Rchild);
55     }
56 }
57 void tree_BackOrder(BinaryTree* T)
58 {
59     if (T == NULL)
60         return;
61     else
62     {
63         tree_PreOrder(T->Lchild);
64         tree_PreOrder(T->Rchild);
65         printf_s("%s\n", T->Data.data);
66     }
67 }
68 
69 int tree_Level(BinaryTree* T,int NowLevel)//获取最大层次        
70 {
71     int MaxLevel=0;
72     if (T == NULL)
73         return NowLevel-1;
74     else
75     {
76         NowLevel++;
77         int L_Level=tree_Level(T->Lchild, NowLevel);
78         int R_Level=tree_Level(T->Rchild, NowLevel);
79         MaxLevel = L_Level > MaxLevel ? L_Level : MaxLevel;
80         MaxLevel = R_Level > MaxLevel ? R_Level : MaxLevel;
81     }
82     if (NowLevel > MaxLevel)
83         MaxLevel = NowLevel;
84     return MaxLevel;
85 }
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include"BinaryTree.h"
 4 
 5 int tree_serch(BinaryTree* T,char* s,int Level)//level:层数
 6 {
 7     if (T == NULL)
 8         return 0;
 9     else
10     {
11         if (!strcmp(T->Data.data, s))
12         {
13             return Level;
14         }
15         int L_Level =tree_serch(T->Lchild , s , Level + 1);
16         if (L_Level != 0)
17             return L_Level;
18 
19         int R_Level = tree_serch(T->Rchild, s, Level + 1);
20         if (R_Level != 0)
21             return R_Level;
22     }
23 }
24 int tree_serch(char* s)//重载 默认情况
25 {
26     return tree_serch(Root, s, 1);
27 }
28 
29 30 
31 int main()
32 {
40     Root                            = Grow();        strcpy_s(Root                            ->Data.data, "A");
41     Root->Lchild                    = Grow();        strcpy_s(Root->Lchild                    ->Data.data, "B");
42     Root->Lchild->Rchild            = Grow();        strcpy_s(Root->Lchild->Rchild            ->Data.data, "D");
43     Root->Lchild->Rchild->Lchild    = Grow();        strcpy_s(Root->Lchild->Rchild->Lchild    ->Data.data, "F");
44     Root->Lchild->Rchild->Rchild    = Grow();        strcpy_s(Root->Lchild->Rchild->Rchild    ->Data.data, "G");
45     Root->Rchild                    = Grow();        strcpy_s(Root->Rchild                    ->Data.data, "C");
46     Root->Rchild->Rchild            = Grow();        strcpy_s(Root->Rchild->Rchild            ->Data.data, "E");
47     Root->Rchild->Rchild->Rchild    = Grow();        strcpy_s(Root->Rchild->Rchild->Rchild    ->Data.data, "H");
48     
51 
52     printf_s("请输入要搜索的结点\n");
53     char s[9] = {0};
54     scanf_s("%s", s,sizeof(s));
55     printf_s("%d\n", tree_serch(s));
56     return 0;
57 }

 

posted @ 2020-04-28 18:15  不是·  阅读(181)  评论(0编辑  收藏  举报