Exemple #1
0
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);
  }
}
Exemple #2
0
void TreeDestroy(Tree* tree) {
  if(NULL == (*tree)) return;
  
  TreeDestroy(&((*tree)->left));
  TreeDestroy(&((*tree)->right));
  
  free(*tree);
  *tree = NULL;
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}
Exemple #5
0
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 );
}
Exemple #6
0
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);
}
Exemple #7
0
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;
}