1、代码

2、运行结果

3、分析


 

1、代码

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef struct _Node
  5 {
  6     int value;
  7     struct _Node * pLeft;
  8     struct _Node * pRight;
  9 } Node;
 10 
 11 Node * getNewNode(int iValue)
 12 {
 13     Node * p = (Node *)malloc(sizeof(Node));
 14     if(NULL != p)
 15     {
 16         p->value = iValue;
 17         p->pLeft = NULL;
 18         p->pRight = NULL;
 19     }
 20 
 21     return p;
 22 }
 23 
 24 void deleteNode(Node * p)
 25 {
 26     if(NULL != p)
 27     {
 28         free(p);
 29     }
 30 }
 31 
 32 int addElm(Node * p, int value)
 33 {
 34     Node * pX = p;
 35     while(pX)
 36     {
 37         if(value < pX->value)
 38         {
 39             if(NULL == pX->pLeft)
 40             {
 41                 pX->pLeft = getNewNode(value);
 42                 printf("add [%2d] to left  of [%2d]\n", value, pX->value);
 43                 break;
 44             }
 45             else
 46             {
 47                 pX = pX->pLeft;
 48             }
 49         }
 50         else
 51         {
 52             if(NULL == pX->pRight)
 53             {
 54                 pX->pRight = getNewNode(value);
 55                 printf("add [%2d] to right of [%2d]\n", value, pX->value);
 56                 break;
 57             }
 58             else
 59             {
 60                 pX = pX->pRight;
 61             }
 62         }
 63     }
 64 
 65     return 0;
 66 }
 67 
 68 Node * makeBinaryTree(int iList[], int iNum)
 69 {
 70     Node * p = getNewNode(iList[0]);
 71     int i = 0;
 72     for(i = 1; i < iNum; i++)
 73     {
 74         addElm(p, iList[i]);
 75     }
 76     printf("\n");
 77 
 78     return p;
 79 }
 80 
 81 void destroyBinaryTree(Node * p)
 82 {
 83     if(NULL == p)
 84     {
 85         return;
 86     }
 87     destroyBinaryTree(p->pLeft);
 88     destroyBinaryTree(p->pRight);
 89     deleteNode(p);
 90 }
 91 
 92 int preorderTraversal(Node * p)
 93 {
 94     if(NULL == p)
 95     {
 96         return -1;
 97     }
 98     printf("%2d ", p->value);
 99     preorderTraversal(p->pLeft);
100     preorderTraversal(p->pRight);
101     return 0;
102 }
103 
104 int postorderTraversal(Node * p)
105 {
106     if(NULL == p)
107     {
108         return -1;
109     }
110     postorderTraversal(p->pLeft);
111     postorderTraversal(p->pRight);
112     printf("%2d ", p->value);
113     return 0;
114 }
115 
116 int inorderTraversal(Node * p)
117 {
118     if(NULL == p)
119     {
120         return -1;
121     }
122     inorderTraversal(p->pLeft);
123     printf("%2d ", p->value);
124     inorderTraversal(p->pRight);
125     return 0;
126 }
127 
128 void preTrvl(Node * p)
129 {
130     printf("pre  : ");
131     preorderTraversal(p);
132     printf("\n");
133 }
134 
135 void postTrvl(Node * p)
136 {
137     printf("post : ");
138     postorderTraversal(p);
139     printf("\n");
140 }
141 
142 void inTrvl(Node * p)
143 {
144     printf("in   : ");
145     inorderTraversal(p);
146     printf("\n");
147 }
148 
149 void printList(int iList[], int iNum)
150 {
151     for(int i = 0; i < iNum; i++)
152     {
153         printf("%d ", iList[i]);
154     }
155     printf("\n");
156 }
157 
158 int main()
159 {
160     int iList[15] = {6, 9, 8, 3, 5, 4, 7, 2, 12, 1, 10, 11};
161     int iNum = 12;
162 
163     printList(iList, iNum);
164     Node * p = makeBinaryTree(iList, iNum);
165     preTrvl(p);
166     postTrvl(p);
167     inTrvl(p);
168     destroyBinaryTree(p);
169 }
View Code

相关文章:

  • 2021-07-15
  • 2022-12-23
  • 2021-12-31
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-27
  • 2021-03-31
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-03
  • 2022-12-23
相关资源
相似解决方案