static void* _postOrder(btree* node) { if(node == NULL) return NULL; _postOrder(node->lbranch); _postOrder(node->rbranch); printf("Postorder payload [%c]\n", _getLetter(node->payload)); return node; }
void TCGenBinaryTree::_postOrder(TCBinaryTreeNode* t) /**************************************************************************** * * Function: TCGenBinaryTree::_postOrder * Parameters: t - Root of subtree to perform traversal on * * Description: Recursive routine to perform a post-order traversal on the * subtree. * ****************************************************************************/ { if (t != o_z) { _postOrder(t->left); _postOrder(t->right); o_visit(t); } }
void TCGenBinaryTree::postOrder(void (*visit)(TCBinaryTreeNode*)) const /**************************************************************************** * * Function: TCGenBinaryTree::postOrder * Parameters: visit - Function to call for each node visited * ****************************************************************************/ { o_z = z; o_visit = visit; _postOrder(root->right); }
void CleanUpBinaryTree() { btree* nodeToDelete = NULL; if(GetRoot() == NULL) return; while(GetRoot() != NULL) { nodeToDelete = (btree *) _postOrder(GetRoot()); printf("Freeing node [%c]\n", _getLetter(nodeToDelete->payload)); SetRoot(DeleteBinaryTreeNode(GetRoot(), _getLetter(nodeToDelete->payload))); } }
void DisplayOrder(enum SearchType sType) { switch(sType) { case PREORDER: _preOrder(GetRoot()); break; case INORDER: _inOrder(GetRoot()); break; case POSTORDER: _postOrder(GetRoot()); break; default: break; } }