void post_order_traversal (PNODE n) { if (n != NULL) { post_order_traversal (n->left); post_order_traversal (n->right); printf ("%i ", n->value); } }
int main() { char buf[50]; int option; PNODE tree = NULL; PNODE node = NULL; while (1) { printf ("--------------------------\n"); printf ("Options are:\n\n"); printf (" 0 Exit\n"); printf (" 1 Insert node\n"); printf (" 2 Delete node\n"); printf (" 3 Find node\n"); printf (" 4 Pre order traversal\n"); printf (" 5 In order traversal\n"); printf (" 6 Post order traversal\n"); printf (" 7 Max depth\n"); printf (" 8 Min depth\n"); printf (" 9 Max value\n"); printf (" 10 Min value\n"); printf (" 11 Node Count\n\n"); printf ("--------------------------\n"); printf ("Select an option: "); fgets (buf, sizeof(buf), stdin); sscanf (buf, "%i", &option); printf ("--------------------------\n"); if (option < 0 || option > 11) { fprintf (stderr, "Invalid option"); continue; } switch (option) { case 0: exit (0); case 1: printf ("Enter number to insert: "); fgets (buf, sizeof(buf), stdin); sscanf (buf, "%i", &option); printf ("\n\n"); insert_node (&tree, option); break; case 2: printf ("Enter number to delete: "); fgets (buf, sizeof(buf), stdin); sscanf (buf, "%i", &option); printf ("\n\n"); delete_node (&tree, option); break; case 3: printf ("Enter number to find: "); fgets (buf, sizeof(buf), stdin); sscanf (buf, "%i", &option); printf ("\n\n"); node = find_node (tree, option); if (node != NULL) { printf ("Found node\n\n"); } else { printf ("Couldn't find node\n\n"); } break; case 4: printf ("Pre order traversal: "); pre_order_traversal (tree); printf ("\n\n"); break; case 5: printf ("In order traversal: "); in_order_traversal (tree); printf ("\n\n"); break; case 6: printf ("Post order traversal: "); post_order_traversal (tree); printf ("\n\n"); break; case 7: printf ("Max depth is %i\n\n", get_max_depth (tree)); break; case 8: printf ("Min depth is %i\n\n", get_min_depth (tree)); break; case 9: printf ("Max value is %i\n\n", get_max_value (tree)); break; case 10: printf ("Min value is %i\n\n", get_min_value (tree)); break; case 11: printf ("Node Count is %i\n\n", get_num_nodes (tree)); break; } } return 0; }
/* Iterator range over all nodes of the tree, order unspecified */ inline node_iterator_range nodes() const { return post_order_traversal(); }