1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <ctype.h>
4
7 typedef struct 8 {
9 long item;
10 int count;
11 Node* pLeft;
12 Node* pRight;
13 } Node;
14
15 Node* creat_node(long);
16 Node* add_node(long, Node*);
17 void list_nodes(Node*);
18 void free_nodes(Node*);
19
20 int main(void)
21 {
22 long newvalue = 0;
23 Node* pRoot = NULL;
24 char answer = 'n';
25 do
26 {
27 printf("Enter the node value: ");
28 scanf("%ld", &newvalue);
29 getchar();
30 if(pRoot == NULL)
31 {
32 pRoot = creat_node(newvalue);
33 }
34 else
35 {
36 add_node(newvalue, pRoot);
37 }
38 printf("Do you want to enter another (y/n)? ");
39 scanf("%c", &answer);
40 } while(tolower(answer) == 'y');
41
42 printf("The values in ascending sequence are: \n");
43 list_nodes(pRoot);
44 free_nodes(pRoot);
45
46 return 0;
47 }
48
49 Node* creat_node(long value)
50 {
51 Node* pNode = (Node*)malloc(sizeof(Node));
52 pNode->item = value;
53 pNode->count = 1;
54 pNode->pLeft = pNode->pRight = NULL;
55 return pNode;
56 }
57
58 Node* add_node(long value, Node* pNode)
59 {
60 if(pNode == NULL)
61 {
62 return creat_node(value);
63 }
64
65 if(value == pNode->item)
66 {
67 ++pNode->count;
68 return pNode;
69 }
70
71 else if(value < pNode->item)
72 {
73 if(pNode->pLeft == NULL)
74 {
75 pNode->pLeft = creat_node(value);
76 return pNode->pLeft;
77 }
78 else
79 {
80 return add_node(value, pNode->pLeft);
81 }
82 }
83 else
84 {
85 if(pNode->pRight == NULL)
86 {
87 pNode->pRight = creat_node(value);
88 return pNode->pRight;
89 }
90 else
91 {
92 return add_node(value, pNode->pRight);
93 }
94 }
95 }
96
97 void list_nodes(Node* pNode)
98 {
99 if(pNode->pLeft != NULL)
100 {
101 list_nodes(pNode->pLeft);
102 }
103
104 printf("%10d x %10ld\n", pNode->count, pNode->item);
105
106 if(pNode->pRight != NULL)
107 {
108 list_nodes(pNode->pRight);
109 }
110 }
111
112 void free_nodes(Node* pNode)
113 {
114 if(pNode == NULL)
115 {
116 return;
117 }
118
119 if(pNode->pLeft != NULL)
120 {
121 free_nodes(pNode->pLeft);
122 }
123
124 if(pNode->pRight != NULL)
125 {
126 free_nodes(pNode->pRight);
127 }
128
129 free(pNode);
130 }
HADEX_ FROM HELL.