Solved

Heapify Binary tree insertion

Posted on 2007-11-18
6
2,126 Views
Last Modified: 2012-08-14
I have an insertion function for a binary tree is it possible to convert it to a Binary Heap instead.The element I am inserting are contained in a Node class with data members of id , name etc

if ( *ptr == NULL )                    // tree is empty
                     {
                        *ptr = new Node( id, name);
                     }
            else                              // tree is not empty
                  if ( id < (( *ptr )->idno ))
                        insertHelper( &( (*ptr)->leftPtr ), id, name );
                  else
                           if ( id > (( *ptr )->idno ))
                              insertHelper( &( ( *ptr )->rightPtr ), id, name);

}//helper takes in a root pointer of type Node* and data members .

0
Comment
Question by:kitrobin
  • 4
  • 2
6 Comments
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
       http://en.wikipedia.org/wiki/Binary_heap

Look at the paragraph "adding to the heap"
0
 

Author Comment

by:kitrobin
Comment Utility
How will I add from the bottom? I am using a pointer to the root.Still very confused
0
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
That's answered in the "Heap implementation" paragraph on the same page.

One approach is to keep a reference to the next sibling on the same level for each node. Alternatively, you can keep the heap in an array, so you don't need pointers.
0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 

Author Comment

by:kitrobin
Comment Utility
Ok.I tried using an array with an example from a text but I can't seem to modify it to work with Node elements
  class BinaryHeap
        {
          public:
            BinaryHeap( int capacity = 100 );
            void insert( long, char[], char[], char[],int, char[], int, char[]);
            void delete( );

          private:
            int currentSize;  // Number of elements in heap
            Node* array;  // The heap array
            
           
            void buildHeap( );
            void percolateDown( int hole );
        };

            BinaryHeap::BinaryHeap( int capacity )
          : array( capacity + 1 ), currentSize( 0 )
        {
        }
       

        void BinaryHeap::insert( long id,      char fname[], char lname[],      char pay[],      int day,
                                  char rmType[], int rmNo, char reason[] )
        {

            array =new Node(id, fname, lname, pay, day, rmType, rmNo, reason);
            int hole = ++currentSize;
           
               for( ; hole > 1 && id < array[ hole / 2 ]; hole /= 2 )
                array[ hole ] = array[ hole / 2 ];
            array[ hole ] = id;
        }
0
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
>>             BinaryHeap::BinaryHeap( int capacity )
>>           : array( capacity + 1 ), currentSize( 0 )

array is a pointer to Node - you can't initialize it to an integer value ... You need to allocate memory for capacity amount of nodes.


The insert will have to be a bit different too.

You can take a look at this example :

        http://library.thinkquest.org/C005618/text/heaps.htm
0
 
LVL 53

Accepted Solution

by:
Infinity08 earned 200 total points
Comment Utility
or the one on this page :

        http://www.cs.fiu.edu/~weiss/dsaa_c++/code/
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Entering a date in Microsoft Access can be tricky. A typo can cause month and day to be shuffled, entering the day only causes an error, as does entering, say, day 31 in June. This article shows how an inputmask supported by code can help the user a…
This is about my first experience with programming Arduino.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

762 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

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now