我在二进制堆中打印根的左子树时遇到问题。我想递归地做,但我认为我没有正确地做到这一点。有人能指出我正确的方向吗?
template <class Comparable>
void BinaryHeap<Comparable> :: printLtSubtree(int i)
{
// INSERT CODE for printLtSubtree HERE
if (i > currentSize)
System.exit();
if (i <= currentSize)
cout << array[i];
printLtSubtree(i->left);
printLtSubtree(i->right);
}
如果索引小于currentSize,我只想打印出元素。
这可能会有所帮助:
template <class Comparable>
class BinaryHeap
{
public:
explicit BinaryHeap( int capacity = 100 );
bool isEmpty( ) const;
bool isFull( ) const;
const Comparable & findMin( );
// const Comparable & findMax( );
// int Height () const;
void printLtSubtree();
void insert( const Comparable & x );
void deleteMin( );
void deleteMin( Comparable & minItem );
void makeEmpty( );
private:
int currentSize; // Number of elements in heap
vector<Comparable> array; // The heap array
void buildHeap( );
void percolateDown( int hole );
void printLtSubtree (int i);
};
#include "BinaryHeap.cpp"
主要功能:
void FillHeap (BinaryHeap<char>& B);
int main()
{
BinaryHeap<char> PQ(50);
FillHeap (PQ);
PQ.deleteMin();
PQ.printLtSubtree();
return 0;
}
void FillHeap (BinaryHeap<char>& B)
{
B.insert('A');
B.insert('B');
B.insert('C');
B.insert('D');
B.insert('E');
B.insert('F');
B.insert('G');
B.insert('H');
B.insert('I');
B.insert('J');
}