void BinaryTree<T>::destroySubTree(TreeNode *nodePtr) { if (nodePtr) { if (nodePtr->left) destroySubTree(nodePtr->left); if (nodePtr->right) destroySubTree(nodePtr->right); delete nodePtr; } }
void AvlTree::destroySubTree(AvlNode *v) { if (v == NULL) return; else { destroySubTree(v->left); destroySubTree(v->right); delete v; } }
static void destroySubTree(TreeNode * node, void (*destroyData)(void * data)) { if(node == NULL) return; destroySubTree(node->left, destroyData); destroySubTree(node->right, destroyData); if(destroyData != NULL) destroyData(node->data); destroyNode(node); }
/* Recursively destroy the Tree */ void avlTree::destroySubTree(avl_node* temp) { if (temp == NULL) return; //Recursively call destroySubTree on the left subtree destroySubTree(temp->left); //Recursively call destroySubTree on the right subtree destroySubTree(temp->right); //Delete the node delete temp; }
void LSQ_DestroySequence(LSQ_HandleT handle){ if(NULL == handle) return; TreePtr tree = handle; destroySubTree(tree->root); freeNode(tree->root); free(tree); }
void destroySubTree(TreeNodePtr node){ int i = 0; for(i = 0; i < node->keyCount; i++) free(node->items[i]); for(i = 0; i < node->childCount; i++){ if(NULL == node->nodes[i]) continue; destroySubTree(node->nodes[i]); freeNode(node->nodes[i]); } }
Boolean AVLTree_destroyTreeAndData(AVLTree * tree, void (*destroyData)(void * data)) { if(tree == NULL || destroyData == NULL) return false; destroySubTree(tree->rootNode, destroyData); free(tree); return true; }
Boolean AVLTree_destroy(AVLTree * tree) { if(tree == NULL) return false; destroySubTree(tree->rootNode, NULL); free(tree); return true; }
~AvlTree() { destroySubTree(root); }