-
Notifications
You must be signed in to change notification settings - Fork 0
/
bitree.test.c
117 lines (99 loc) · 2.35 KB
/
bitree.test.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "list.h"
#include "bitree.h"
typedef struct UserInfo_{
int seq;
char username[20];
}UserInfo;
int compare(const void *data1, const void *data2){
return strcmp(((UserInfo *)data1)->username, ((UserInfo *)data2)->username);
}
void destroy(void* data){
free(data);
}
void* print(const void *data){
puts(((UserInfo *)data)->username);
return NULL;
}
UserInfo *u[10];
BiTree *bt, *bt1, *bt2;
int setup(){
if((bt = (BiTree *)malloc(sizeof(BiTree))) == NULL){
return -1;
}
if((bt1 = (BiTree *)malloc(sizeof(BiTree))) == NULL){
free(bt);
return -1;
}
if((bt2 = (BiTree *)malloc(sizeof(BiTree))) == NULL){
free(bt);
free(bt1);
return -1;
}
bitree_init(bt, destroy, compare);
bitree_init(bt1, destroy, compare);
bitree_init(bt2, destroy, compare);
for(int i=0; i<10; i++){
if((u[i] = (UserInfo *)malloc(sizeof(UserInfo))) == NULL){
for(int j=i-1; j>=0; j--){
free(u[j]);
return -1;
}
}
u[i]->seq = i;
sprintf(u[i]->username, "%d-item", i);
}
return 0;
}
void enddown(){
bitree_destroy(bt);
bitree_destroy(bt1);
bitree_destroy(bt2);
free(bt);
free(bt1);
free(bt2);
for(int i=0; i<10; i++){
free(u[i]);
}
}
int main(){
setup();
puts("Add 0-item as BT1's root, BT1: ");
bitree_add_left(bt1, NULL, u[0]);
bitree_dump(bt1, print);
puts("");
puts("Add 1-item as BT2's root, BT2: ");
bitree_add_left(bt2, NULL, u[1]);
bitree_dump(bt2, print);
puts("");
puts("Add 2-item as BT1's root's left child ");
bitree_add_left(bt1, bitree_root(bt1), u[2]);
puts("Add 3-item as BT1's root's right child ");
bitree_add_right(bt1, bitree_root(bt1), u[3]);
puts("BT1: ");
bitree_dump(bt1, print);
puts("");
puts("Add 4-item as BT2's root's left child ");
bitree_add_left(bt2, bitree_root(bt2), u[4]);
puts("Add 5-item as BT2's root's right child ");
bitree_add_right(bt2, bitree_root(bt2), u[5]);
puts("BT2: ");
bitree_dump(bt2, print);
puts("");
printf("BT1 len: %d\n", bitree_size(bt1));
printf("BT2 len: %d\n", bitree_size(bt2));
printf("BT len: %d\n", bitree_size(bt));
puts("Merge BT1 and BT2 to BT: ");
bitree_merge(bt, bt1, bt2, u[6]);
bitree_dump(bt, print);
puts("");
printf("BT len: %d\n", bitree_size(bt));
puts("BT remove left child, BT: ");
bitree_remove_left(bt, bitree_root(bt));
bitree_dump(bt, print);
puts("");
enddown();
return 0;
}