Skip to content

Commit 3b59b07

Browse files
Add files via upload
1 parent 9dceb65 commit 3b59b07

File tree

1 file changed

+210
-0
lines changed

1 file changed

+210
-0
lines changed

hw4_tree_traversals.c

+210
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
typedef struct _binaryTree
5+
{
6+
char keyValue;
7+
char string[11];
8+
struct _binaryTree* leftChild;
9+
struct _binaryTree* rightChild;
10+
} TREENODE;
11+
12+
typedef struct _treeStack
13+
{
14+
TREENODE* root;
15+
struct _treeStack* next;
16+
} ROOTS;
17+
18+
#define ARRAY 11
19+
20+
TREENODE* addChildren(TREENODE* treeTop, char newDatum,
21+
char code[ARRAY]);
22+
int preOrderTraversal(TREENODE* topOfTree);
23+
int inOrderTraversal(TREENODE* topTree);
24+
TREENODE* searchNode(char node, TREENODE *start);
25+
ROOTS* push(TREENODE *save, ROOTS * topOfStack);
26+
TREENODE* pop(ROOTS ** stackAddress);
27+
28+
int main()
29+
{
30+
TREENODE* root = NULL;
31+
TREENODE* findNode = NULL;
32+
char action = '\0';
33+
char addDatum = '\0';
34+
char searchFor = '\0';
35+
char message[ARRAY] = { '\0' };
36+
do
37+
{
38+
printf("[i for insert, f for find, q for quit] \
39+
\n\rEnter action: ");
40+
scanf(" %c", &action);
41+
if(action == 'i')
42+
{
43+
printf("Enter new nodes's key value: ");
44+
scanf(" %c", &addDatum);
45+
printf("Enter a string of up to 10 characters for %c: ",
46+
addDatum);
47+
scanf("%s", message);
48+
root = addChildren(root, addDatum, message);
49+
printf("\nPre-order traversal: ");
50+
preOrderTraversal(root);
51+
printf("\nInorder traversal: ");
52+
inOrderTraversal(root);
53+
}
54+
else if(action == 'f')
55+
{
56+
printf("Enter search key: ");
57+
scanf(" %c", &searchFor);
58+
findNode = searchNode(searchFor, root);
59+
if (findNode != NULL)
60+
printf("Found the string '%s' there. \n",
61+
findNode->string);
62+
else
63+
printf("'%c' not in the tree \n", searchFor);
64+
}
65+
else if (action == 'q')
66+
printf("Bye.\n");
67+
else
68+
printf("Invalid Input \n");
69+
70+
}
71+
while (action != 'q');
72+
return 0;
73+
}
74+
75+
TREENODE* addChildren(TREENODE* treeTop, char newDatum,
76+
char code[ARRAY])
77+
{
78+
TREENODE* newChild = NULL;
79+
TREENODE* trvTree = treeTop;
80+
int index = 0;
81+
newChild = malloc(sizeof(TREENODE));
82+
newChild->keyValue = newDatum;
83+
for(index = 0; index < ARRAY; ++index)
84+
newChild->string[index] = code[index];
85+
if (treeTop == NULL)
86+
treeTop = newChild;
87+
else
88+
while (trvTree != NULL)
89+
if((newChild->keyValue < trvTree->keyValue)
90+
&& (trvTree->leftChild == NULL))
91+
{
92+
trvTree->leftChild = newChild;
93+
trvTree = NULL;
94+
}
95+
else if((newChild->keyValue > trvTree->keyValue)
96+
&& (trvTree->rightChild == NULL))
97+
{
98+
trvTree->rightChild = newChild;
99+
trvTree = NULL;
100+
}
101+
else if((newChild->keyValue < trvTree->keyValue)
102+
&& (trvTree->leftChild != NULL))
103+
trvTree = trvTree->leftChild;
104+
else if((newChild->keyValue > trvTree->keyValue)
105+
&& (trvTree->rightChild != NULL))
106+
trvTree = trvTree->rightChild;
107+
else
108+
{
109+
printf("Key value is already assigned node\n");
110+
trvTree = NULL;
111+
}
112+
return treeTop;
113+
}
114+
115+
int preOrderTraversal(TREENODE *topOfTree)
116+
{
117+
TREENODE* traverse = topOfTree;
118+
ROOTS* findStack = NULL;
119+
int complete = 0;
120+
while(complete != 1)
121+
{
122+
while(traverse != NULL)
123+
{
124+
printf("%c ",traverse->keyValue);
125+
if(traverse->leftChild != NULL)
126+
{
127+
findStack = push(traverse,findStack);
128+
traverse = traverse->leftChild;
129+
}
130+
else
131+
{
132+
traverse = traverse->rightChild;
133+
}
134+
}
135+
traverse = pop(&findStack);
136+
if (traverse == NULL)
137+
complete = 1;
138+
else
139+
traverse = traverse->rightChild;
140+
}
141+
return 1;
142+
}
143+
144+
int inOrderTraversal(TREENODE* topTree)
145+
{
146+
TREENODE* travel = topTree;
147+
ROOTS* stackTop = NULL;
148+
int finished = 0;
149+
while (finished != 1)
150+
{
151+
while(travel != NULL)
152+
{
153+
if(travel->leftChild != NULL)
154+
{
155+
stackTop = push(travel,stackTop);
156+
travel = travel->leftChild;
157+
}
158+
else
159+
{
160+
printf("%c ",travel->keyValue);
161+
travel = travel->rightChild;
162+
}
163+
}
164+
travel = pop(&stackTop);
165+
if (travel == NULL)
166+
finished = 1;
167+
else
168+
{
169+
printf("%c ",travel->keyValue);
170+
travel = travel->rightChild;
171+
}
172+
}
173+
return finished;
174+
}
175+
176+
TREENODE* searchNode(char node, TREENODE* start)
177+
{
178+
TREENODE* traverse = start;
179+
while (traverse != NULL)
180+
if (node == traverse->keyValue)
181+
return traverse;
182+
else if (node < traverse->keyValue)
183+
traverse = traverse->leftChild;
184+
else
185+
traverse = traverse->rightChild;
186+
return NULL;
187+
}
188+
189+
ROOTS* push(TREENODE* save, ROOTS* topOfStack)
190+
{
191+
ROOTS* newRoot = NULL;
192+
newRoot = malloc(sizeof(ROOTS));
193+
newRoot->root = save;
194+
newRoot->next = topOfStack;
195+
topOfStack = newRoot;
196+
return topOfStack;
197+
}
198+
199+
TREENODE* pop(ROOTS** stackAddress)
200+
{
201+
TREENODE* extract = NULL;
202+
if (*stackAddress == NULL)
203+
return NULL;
204+
else
205+
{
206+
extract = (*stackAddress)->root;
207+
*stackAddress = (*stackAddress)->next;
208+
return extract;
209+
}
210+
}

0 commit comments

Comments
 (0)