Solved

Deleting Within A Tree

Posted on 1998-06-25
3
221 Views
Last Modified: 2010-04-01
Need help with code that will enable the user to delete a node within a tree of words.
0
Comment
Question by:John500
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 22

Accepted Solution

by:
nietod earned 40 total points
ID: 1166653
I assume this if for me.  right?  If you send me a final copy.  (If we are there yet.)  I'll paste it in here.
0
 
LVL 22

Expert Comment

by:nietod
ID: 1166654
The final code:
*********************
void Probe::hook(Node *ptr,BinTree *tree, Node *par, Node *cur)
{
 if(_top == 0)
 {
  tree->_root = ptr;
 }
 else if(cur == par->_left)
 {
  par->_left = ptr;
 }
 else
 {
  par->_right = ptr;
 }
 _trail[_top] = ptr;
}

void Probe::deleteCurrent(BinTree *tree)
{ // delete current node: trail [top]
 if(_top < 0)
  return;  // empty tree

 Node *par, *cur = _trail[_top];  // nicer name for current node

 tree->_numNodes--;  // adjust tree statistics
 tree->_numWords -= cur->_count;

 if(_top > 0)
  par = _trail[_top - 1];  //parent if current node has one

 if(!cur -> _left) // has no left child, might have right child
 {
  hook(cur->_right,tree,par,cur);
  if(!_trail[_top]) _top--;  // node gone, back up
 }

 else if (!cur->_right)  // has no right child, does have left child
 {
  hook(cur->_left,tree,par,cur);
 }

 else  // cur has both children present
 {
  // find inorder successor to cur
  Node * p = cur->_right;
  if(!p->_left)  // already at inorder successor
  {
   p->_left = cur->_left;  // make p's left ptr same as cur's
   hook(p,tree,par,cur);
  }
  else
  {
   while(p->_left && p->_left->_left)
   { p = p->_left;
    // now p points to parent of inorder successor to cur
    Node *succ = p->_left;
    p->_left = succ->_right;  // hook up subtree

    succ->_left = cur->_left;
    succ->_right = cur->_right;
    hook(succ,tree,par,cur);
   }
  }
 }
 cur->_left = NULL;
 cur->_right = NULL;
 delete cur;
}

0
 

Author Comment

by:John500
ID: 1166655
Much Thanks!
0

Featured Post

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Setting nameservers after res_init fails doing res_query 2 136
How do I get Window Title of all opened process? 4 58
learn programming 8 92
print bytes of an integer 6 46
What is C++ STL?: STL stands for Standard Template Library and is a part of standard C++ libraries. It contains many useful data structures (containers) and algorithms, which can spare you a lot of the time. Today we will look at the STL Vector. …
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

738 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question