Mam taką stertę:

#include <iostream>
#include <math.h>  //uzywanie log( ) i pow(,) w printb ()
using namespace std;
void wstaw (int x);
void doGory ();
void naDol ();
void printb ();
int pobierz();
int sterta[100];
int l=0; //ilosc elementow
void main()
{
	char c='x';
	int a;
	int i;
	while (c!='k')
	{cout<<"dodaj d, pobierz p, koniec k, print e, drzewo b \n";
	cin>>c;
	switch (c) 	{

	case 'd':
	cout<<"dodaj liczbe ";
	cin>>a;
	wstaw (a);
	break;

	case 'p':
		cout<<"------------liczba ze strety----------"<<endl;
		// cout<<"l="<<l<<endl;
		if (l==0) {cout<<"sterta pusta"<<endl;}
		if (l!=0) {cout<<pobierz()<<endl;}

		cout<<"--------------------------------------"<<endl;
		break;

	case 'e':
		cout<<"*****************************************"<<endl;
		for(i=1; i<=l; i++) cout<<sterta[i]<<" ";
		cout<<endl;
		cout<<"*****************************************"<<endl;
		break;

	case 'b':
		printb ();
		break;
	default:
		break;
	}
	}
}
//**********************************************
void wstaw (int x) {
	sterta[++l]=x;
	doGory();      }
//**********************************************
void doGory ()              {
	int temp=sterta[l];
	int n=l;
	while ((n!=1)&&(sterta[n/2]<=temp))
	{
		sterta[n]=sterta[n/2];
		n=n/2;
	}
sterta[n]=temp;              }
//**********************************************
int pobierz()                {
	if (l>=1) {
				int x=sterta[1];
				sterta[1]=sterta[l--];
				naDol();
				return x;
				}
	cout<<"sterta pusta"<<endl;
	return 0;                 }
//**********************************************
void naDol ()                 {
	int i=1;
	while (1) {
		int p=i; // lewy potomek wezla 'i'=p, prawy=p+l
		if (p<l) break;
		if ((p+1<=l) && sterta[p] < sterta [p+1]) p++; // prawy potomek istnieje
                                   		// przesuwamy sie do nast?pnego elementu
		if (sterta [i] >= sterta[p]) break;
		int temp=sterta[p];  // zamiana elementow
		sterta[i]=sterta[p];
		temp=sterta[i];
		p=i;  }               }
//**********************************************
//**********************************************
//**********************************************
void printb () 
{
	int ll1, j,i,kk,n,step,n2;

cout<<"*****************************************"<<endl;
//ll1=(log((double)l) / log((double)2))+1;
ll1=(int)((log((double)l) / log((double)2))+1);

//ll1 -liczba urowniej
//cout<<"ll1="<<ll1<<endl;

//ll=((ll1)+1)/2+1;

//n=pow((double)2,(double)ll1);
n=(int)pow((double)2,(double)ll1);

//cout<<"n="<<n<<endl;
n2=n/2;
step=n;
for(i=1; i<=l;  i*=2) 
{
	for (kk=1; kk<=n2; kk++) cout<<"  "; 	
	

		for(j=i; ((j<=l) && (j<2*i)); j++)
		{
			cout<<sterta[j];
			for (kk=1; kk<=step; kk++) cout<<" ";
		}
		cout<<endl;
		n2=n2/2;
		step=step/2;
		cout<<endl;
}
//cout<<endl;
cout<<"*****************************************"<<endl;
}
 

I muszę ją przerobić żeby działała odwrotnie - żeby po dodaniu liczb do sterty i ich pobraniu, program wyświetlił je w tej samej kolejności, co pobrał, drzewo też ma tak działać i print e.