Пример #1
0
    std::shared_ptr<Node>
    Tree::deleteHelper(int val, std::shared_ptr<Node> p)
    {
      if (p.get() == NULL) {
	return p;
      } // if
      
      if (val < p->value()) {
	p->left() = deleteHelper(val, p->left());
      } else if (val > p->value()) {
	p->right() = deleteHelper(val, p->right());
      } else {
	// return the non-null child
	if (p->left() == NULL) {
	  return p->right();
	} else if (p->right() == NULL) {
	  return p->left();
	} else {
	  // there are 2 non NULL children. we need to perform a merge here to avoid sub tree formation
	  // we find the max from the left sub-tree and swap it into the position to be deleted
	  // and then delete the swapped position

	  // get data from the rightmost node in the left subtree
	  int max = retrieveMax(*(p->left()));
	  p->setValue(max);
	  // at this point both the current node and the rightmost
	  // node in the left subtree have the same data value

	  // delete the rightmost node in the left subtree
	  p->left() =  deleteHelper(p->value(), p->left()) ;
	} // if
  
      } // if
      return p;
    } // deleteHelper
Пример #2
0
void AVL<T>::deleteHelper(T &value, Node* &rt){
	if(rt == NULL)
		return;
	else if (value < rt->element){
		deleteHelper(value, rt->left);
		if(height(rt->right) - height(rt->left) == 2){
			if(rt->right->right == NULL)
				doubleRotateWithRightChild(rt);
			else
				rotateWithRightChild(rt);
		}
		rt->deltaHeight = max(height(rt->left), height(rt->right)) +1;
	}
	else if (value > rt->element){
		deleteHelper(value, rt->right);
		if(height(rt->left) - height(rt->right) == 2){
			if(rt->left->right == NULL)
				doubleRotateWithLeftChild(rt);
			else
				rotateWithLeftChild(rt);
		}
		rt->deltaHeight = max(height(rt->left),height(rt->right)) + 1;
	}
	else if(rt->left != NULL && rt->right != NULL){
		rt->element = findMin(rt->right)->element;
		deleteHelper(rt->element, rt->right);
	}
	else{
		Node* old = rt;
		rt = (rt->left != NULL) ? rt->left : rt->right;
		delete old;
		numNodes--;
	}
}
void SkewHeap::deleteHelper(Node* subtree)
{
      if(subtree->getLeft()!=nullptr)
      {
            deleteHelper(subtree->getLeft());
      }
      if(subtree->getRight()!=nullptr)
      {
            deleteHelper(subtree->getRight());
      }
      delete subtree;
}
Пример #4
0
void deleteKey(trie_t *pTrie, char key[])
{
    int len = strlen(key); 
    if( len > 0 )    {
        deleteHelper(pTrie->root, key, 0, len);
    }
}
Пример #5
0
    void
    Tree::deleteVal(const Node& val)
    {
      if(d_root.get() == NULL) {
	return;
      }

      d_root = deleteHelper(val.value(), d_root);
    }
Пример #6
0
// O(n*w)
// where 'n' is the number of entrys in the dictionary and 'w' the max word length in the dictionary
// One could say this is linear with respect to the sum of the lengths of the words -- See linked paper
void deleteHelper(Aho_Corasick::Node *n)
{
    // Delete all children
    for (auto i=n->matchPath.begin(); i != n->matchPath.end(); i++)
    {
        deleteHelper(i->second);
    }

    delete n;
}
Пример #7
0
int deleteHelper(trieNode_t *pNode, char key[], int level, int len)
{
    if( pNode )
    {
        // Base case
        if( level == len )
        {
            if( pNode->eos )
            {
                // Unmark leaf node
                pNode->eos = 0;

                // If empty, node to be deleted
                if( isItFreeNode(pNode) )
                {
                    return 1;
                }

                return 0;
            }
        }
        else // Recursive case
        {
            int index = key[level]-'a';

            if( deleteHelper(pNode->child[index], key, level+1, len) )
            {
                // last node marked, delete it
                FREE(pNode->child[index]);

                // recursively climb up, and delete eligible nodes
                return ( !leafNode(pNode) && isItFreeNode(pNode) );
            }
        }
    }

    return 0;
}
Пример #8
0
bool deleteHelper(trie_node_t *pNode, char key[], int level, int len)
{
    if( pNode )
    {
        // Base case
        if( level == len )
        {
            if( pNode->value )
            {
                // Unmark leaf node
                pNode->value = 0;
 
                // If empty, node to be deleted
                if( isItFreeNode(pNode) )
                {
                    return true;
                }
 
                return false;
            }
        }
        else // Recursive case
        {
            int index = INDEX(key[level]);
 
            if( deleteHelper(pNode->children[index], key, level+1, len) )
            {
                // last node marked, delete it
                FREE(pNode->children[index]);
 
                // recursively climb up, and delete eligible nodes
                return ( !leafNode(pNode) && isItFreeNode(pNode) );
            }
        }
    } 
    return false;
}
Пример #9
0
void LmmsCore::destroy()
{
	s_projectJournal->stopAllJournalling();
	s_mixer->stopProcessing();

	PresetPreviewPlayHandle::cleanup();

	s_song->clearProject();

	deleteHelper( &s_bbTrackContainer );
	deleteHelper( &s_dummyTC );

	deleteHelper( &s_fxMixer );
	deleteHelper( &s_mixer );

	deleteHelper( &s_ladspaManager );

	//delete ConfigManager::inst();
	deleteHelper( &s_projectJournal );

	deleteHelper( &s_song );

	delete ConfigManager::inst();
}
SkewHeap::~SkewHeap()
{
      deleteHelper(this->getRoot());
}
Пример #11
0
void engine::destroy()
{
	s_mixer->stopProcessing();

	deleteHelper( &s_projectNotes );
	deleteHelper( &s_songEditor );
	deleteHelper( &s_bbEditor );
	deleteHelper( &s_pianoRoll );
	deleteHelper( &s_automationEditor );
	deleteHelper( &s_fxMixerView );

	PresetPreviewPlayHandle::cleanup();
	InstrumentTrackView::cleanupWindowCache();

	s_song->clearProject();

	deleteHelper( &s_bbTrackContainer );
	deleteHelper( &s_dummyTC );

	deleteHelper( &s_mixer );
	deleteHelper( &s_fxMixer );

	deleteHelper( &s_ladspaManager );

	//delete configManager::inst();
	deleteHelper( &s_projectJournal );

	s_mainWindow = NULL;

	deleteHelper( &s_song );

	delete configManager::inst();
}
Пример #12
0
// O(n*w)
Aho_Corasick::Trie::~Trie(void)
{
    deleteHelper(root);
}
Пример #13
0
void AVL<T>::deleteEntry(T value){
		deleteHelper(value, root);
}
Пример #14
0
void VFSFile::delBuf(void *mem)
{
    deleteHelper(_delfunc, (char*) mem);
}