static void TreeDoDelete(Tree* toDelete) { if ( toDelete->left && toDelete->right ) { Tree* minTree = TreeMin(toDelete->right); toDelete->data = minTree->data; TreeDoDelete(minTree); } else if ( toDelete->left ) { toDelete->data = toDelete->left->data; TreeDestroy(toDelete->left); } else if ( toDelete->right ) { toDelete->data = toDelete->right->data; TreeDestroy(toDelete->right); } else { if ( toDelete->parent ) { if ( toDelete->parent->left == toDelete ) toDelete->parent->left = NULL; else if ( toDelete->parent->right == toDelete ) toDelete->parent->right = NULL; } TreeDestroy(toDelete); } }
void TreeDestroy(Tree* tree) { if(NULL == (*tree)) return; TreeDestroy(&((*tree)->left)); TreeDestroy(&((*tree)->right)); free(*tree); *tree = NULL; }
void TreeDestroy(RBNode* Tree) { if(Tree->Right != &Nil) TreeDestroy(Tree->Right); if(Tree->Left != &Nil) TreeDestroy(Tree->Left); Tree->Left = &Nil; Tree->Right = &Nil; Destroy(Tree); }
void TreeDestroy(TreeNode *tree) { if (tree == NULL) return; if (tree->vlist) ValueDestroy(tree->vlist); if (tree->key) free(tree->key); if (tree->value) free(tree->value); if (tree->left) TreeDestroy(tree->left); if (tree->right) TreeDestroy(tree->right); }
int main () { // —оздание дерева с меткой корн¤ СAТ Tree * pTree = TreeCreate( "1st" ); // ƒобавл¤ем дочерние узлы к корню TreeNode * pNodeB = TreeInsertChild( pTree->m_pRoot, "2nd" ); TreeNode * pNodeC = TreeInsertChild( pTree->m_pRoot, "3rd" ); TreeInsertChild( pTree->m_pRoot, "4th" ); // ƒобавл¤ем дочерние узлы к узлу СBТ TreeInsertChild( pNodeB, "5th" ); TreeInsertChild( pNodeB, "6th" ); // ƒобавл¤ем дочерние узлы к узлу СCТ TreeInsertChild( pNodeC, "7th" ); // ќбход дерева 3 способами с распечаткой значений: // 1) ѕр¤мой TreeDirectWalk( * pTree, & PrintNodeLabel ); std::cout << std::endl; // 2) ќбратный TreeReverseWalk( * pTree, & PrintNodeLabel ); std::cout << std::endl; // 3) —имметричный TreeSymmetricWalk( * pTree, & PrintNodeLabel ); std::cout << std::endl; // ”ничтожение дерева TreeDestroy( pTree ); }
void TreeDestroy(Tree* tree) { if ( tree->left ) { printf("left "); TreeDestroy(tree->left); tree->left = NULL; } if ( tree->right ) { printf("right "); TreeDestroy(tree->right); tree->right = NULL; } free(tree); }
int TreeDestroy ( TreeNode* ParentNode ) { if ( IsTreeValid ( ParentNode ) != 0 ) return -1; if ( ParentNode->Left != NULL ) { TreeDestroy ( ParentNode->Left ); free( ParentNode->Left ); } if ( ParentNode->Right != NULL ) { TreeDestroy ( ParentNode->Right ); free( ParentNode->Right ); } free ( ParentNode ); return 0; }