% gcc -o tree tree.c > tcc tree.c % tree > h h(elp; q(uit; r(oot x; i(nsert [f|n]+ x (ex: i ffn x); P(reorder; p(ostorder I(norder; b(fs
Data File with Test Cases: tree.dat
r h i f e, i fn w, i fnn d, i ff l, i ffn l, i ffnn o, i fnf o, i fnff r, i fnfn l P p I b % tree tree.dat
P(reorder, p(ostorder, I(norder are RECURSIVE traversals.
Preorder: print first, then visit others recursively.
postorder: visit others recursively, then print.
Inorder: visit first child, print, then visit other children.
Breadth-first search: print by layers usine a queue.
Tree Traversals: tree.dat [52]
Preorder: print, visit others postorder: visit others, print
depth pointer first next element depth pointer first next element
0 33856 33880 0 h 2 33952 0 33976 l
1 33880 33952 33904 e 2 33976 0 34000 l
2 33952 0 33976 l 2 34000 0 0 o
2 33976 0 34000 l 1 33880 33952 33904 e
2 34000 0 0 o 3 34048 0 0 r
1 33904 34024 33928 w 2 34024 34048 34072 o
2 34024 34048 34072 o 2 34072 0 0 l
3 34048 0 0 r 1 33904 34024 33928 w
2 34072 0 0 l 1 33928 0 0 d
1 33928 0 0 d 0 33856 33880 0 h
Inorder: visit child, print, visit others breadth-first: print by layers
depth pointer first next element depth pointer first next element
2 33952 0 33976 l 0 33856 33880 0 h
1 33880 33952 33904 e 1 33880 33952 33904 e
2 33976 0 34000 l 1 33904 34024 33928 w
2 34000 0 0 o 1 33928 0 0 d
0 33856 33880 0 h 2 33952 0 33976 l
3 34048 0 0 r 2 33976 0 34000 l
2 34024 34048 34072 o 2 34000 0 0 o
1 33904 34024 33928 w 2 34024 34048 34072 o
2 34072 0 0 l 2 34072 0 0 l
1 33928 0 0 d 3 34048 0 0 r
Tree Traversals: tree.c [53]
typedef char element_type;
typedef struct tree_node *tree_ptr;
struct tree_node {
element_type element;
tree_ptr first_child;
tree_ptr next_sibling;
};
typedef tree_ptr TREE;
TREE create_node(element_type x) {
TREE T;
T = (TREE) malloc(sizeof(struct tree_node));
if (T == NULL) printf("Out of space!\n");
else {
T->element = x;
T->first_child = NULL;
T->next_sibling = NULL;
}
return T;
}
void preorder(TREE T, int depth) { void postorder(TREE T, int depth) {
TREE child; TREE child;
if (T != NULL) { if (T != NULL) {
show_node(T,depth); child = T->first_child;
child = T->first_child; while (child != NULL) {
while (child != NULL) { postorder(child,depth+1);
preorder(child,depth+1); child = child->next_sibling;
child = child->next_sibling; }
} show_node(T,depth);
} }
} }
void inorder(TREE T, int depth) { void bfs(TREE T, int depth) {
/* visit first child enqueue(T,Q);
print while (!is_empty(Q) {
visit all other children T = dequeue(Q);
*/ show_node(T,?);
for all children of T
enqueue(child,Q);
}
} }