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
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; }
void deleteKey(trie_t *pTrie, char key[]) { int len = strlen(key); if( len > 0 ) { deleteHelper(pTrie->root, key, 0, len); } }
void Tree::deleteVal(const Node& val) { if(d_root.get() == NULL) { return; } d_root = deleteHelper(val.value(), d_root); }
// 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; }
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; }
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; }
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()); }
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(); }
// O(n*w) Aho_Corasick::Trie::~Trie(void) { deleteHelper(root); }
void AVL<T>::deleteEntry(T value){ deleteHelper(value, root); }
void VFSFile::delBuf(void *mem) { deleteHelper(_delfunc, (char*) mem); }