예제 #1
0
void BinaryTree<T>::destroySubTree(TreeNode *nodePtr)
{
    if (nodePtr)
    {
        if (nodePtr->left)
            destroySubTree(nodePtr->left);
        if (nodePtr->right)
            destroySubTree(nodePtr->right);
        delete nodePtr;
    }
}
예제 #2
0
void AvlTree::destroySubTree(AvlNode *v)
{
	if (v == NULL)
		return;
	else
	{
		destroySubTree(v->left);
		destroySubTree(v->right);
		delete v;
	}
}
예제 #3
0
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);
}
예제 #4
0
/*
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;
}
예제 #5
0
파일: tree.c 프로젝트: FooBarrior/IMCS
void LSQ_DestroySequence(LSQ_HandleT handle){
    if(NULL == handle) return;
    TreePtr tree = handle;
    destroySubTree(tree->root);
    freeNode(tree->root);
    free(tree);
}
예제 #6
0
파일: tree.c 프로젝트: FooBarrior/IMCS
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]);
    }
}
예제 #7
0
Boolean AVLTree_destroyTreeAndData(AVLTree * tree, void (*destroyData)(void * data))
{
	if(tree == NULL || destroyData == NULL)
		return false;

	destroySubTree(tree->rootNode, destroyData);

	free(tree);

	return true;
}
예제 #8
0
Boolean AVLTree_destroy(AVLTree * tree)
{
	if(tree == NULL)
		return false;

	destroySubTree(tree->rootNode, NULL);

	free(tree);

	return true;
}
예제 #9
0
		~AvlTree() { destroySubTree(root); }