next up previous contents
Next: Binary Trees: ADT Up: Trees: ADT Previous: Trees: ADT   Contents

Tree Traversals: tree [51]

% 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;
}


Arrays: tree.c [54]
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);
                                           }
}                                        }



Ted Billard 2001-10-25