static void traverse_preorder(BTREE_NODE_p_t node,BTREE_VISIT_PROC_p_t visit_proc){ if (node!=NULL) { visit_proc(node->data); traverse_preorder(node->left, visit_proc); traverse_preorder(node->right, visit_proc); } }
/* traverse the tree in order */ void traverse_preorder (struct node *leaf) { if (leaf) { printf ("%d ", leaf->key); traverse_preorder (leaf->left); traverse_preorder (leaf->right); } }
void traverse_preorder(struct tree *node) { if (node == NULL) return; print_node(node); traverse_preorder(node->left); traverse_preorder(node->right); #ifndef TWO_DIMENSION traverse_preorder(node->up); traverse_preorder(node->down); #endif }
int main2() { Node *n110 = make_node(110, NULL, NULL); Node *n125 = make_node(125, n110, NULL); Node *n175 = make_node(175, NULL, NULL); Node *n150 = make_node(150, n125, n175); Node *n25 = make_node(25, NULL, NULL); Node *n75 = make_node(75, NULL, NULL); Node *n50 = make_node(50, n25, n75); Node *n100 = make_node(100, n50, n150); Node *root = n100; int sum = 0; traverse_preorder(root, print_node, &sum); }
int main () { node *root1 = NULL, *root2 = NULL, *root3 = NULL; int nodes1[6] = { 1, 2, 3, 4, 5, 6 }; int nodes2[6] = { 8, 10, 2, 1, 5, 3 }; int c; for (c = 0; c < 6; c++) { // printf ("inserting tree 1: %d\n", nodes1[c]); insert (&root1, nodes1[c]); } for (c = 0; c < 6; c++) { // printf ("inserting tree 2: %d\n", nodes1[c]); insert_reverse (&root2, nodes1[c]); } for (c = 0; c < 6; c++) { // printf ("inserting tree 3: %d\n", nodes2[c]); insert (&root3, nodes2[c]); } printf ("tree 1: \n"); traverse_preorder (root1); printf ("\ntree2: \n"); traverse_preorder (root2); printf ("\ntree3: \n"); traverse_preorder (root3); printf ("\n"); printf ("are 1 and 2 mirrors? %s\n", is_mirror (root1, root2) ? "yes" : "no"); printf ("are 1 and 3 mirrors? %s\n", is_mirror (root1, root3) ? "yes" : "no"); destroy_tree (root1); return 0; }
BTREE_ID_t BTREE_traverse_tree(BTREE_ID_t tree,BTREE_TRAVERSE_ORDER_e_t order,BTREE_VISIT_PROC_p_t visit_proc){ switch (order) { case BTREE_PREORDER: traverse_preorder(tree->root, visit_proc); break; case BTREE_INORDER: traverse_inorder(tree->root, visit_proc); break; case BTREE_POSTORDER: traverse_postorder(tree->root,visit_proc); break; default: CDA_ASSERT(CDA_FALSE); break; } return tree; }
void traverse_preorder(Node *node, void (*func)(Node *node, void *context), void *context) { if (!node) return; func(node, context); traverse_preorder(node->left, func, context); traverse_preorder(node->right, func, context); }