```cpp
题目描述 输入两个数字
第一个是 M个节点
第二个是 N个路径
打印这N个下标到根节点的路径
#include<iostream>
using namespace std;
#define Max 60
typedef struct student
{
int *data;
int Size; //定义当前元素的个数
int capacity; //定义最大容量
}*MaxHeap,maxheap;
void init_Maxheap(MaxHeap &L); //初始化最大堆
bool heap_full(MaxHeap &L); //判断最大堆是否为空
void Creat_init(MaxHeap &L,int Max_soldier) ;//创造最大堆
void insert_data(MaxHeap &L,int data); //最大堆插入节点
void printlist(MaxHeap L); //打印所有的节点
void printlist(MaxHeap L,int e) ; //打印e节点到根节点的所有值
int main()
{
MaxHeap L;
init_Maxheap(L);
int Max_soldier=1000; //定义一个哨兵元素
Creat_init(L,Max_soldier);
int n,m,data;
cout<<"您想创建几个节点"<<endl;
cin>>n;
cout<<"你想打印几个节点到根节点的路径"<<endl;
cin>>m;
int i;
for(i=1;i<=n;i++)
{
cin>>data;
insert_data(L,data);
}
int value;
for(i=1;i<=m;i++)
{
cout<<"请输入第"<<i<<"个节点"<<endl;
cin>>value;
printlist(L,value);
}
}
void init_Maxheap(MaxHeap &L) //初始化最大堆
{
L=NULL;
}
bool heap_full(MaxHeap &L) //判断最大堆是否为空
{
if(L==NULL) //如果还没有初始化
{
return true;
}
else if(L->Size==L->capacity) //如果已经满了
{
return true;
}
else //好没满
{
return false;
}
}
void Creat_init(MaxHeap &L,int Max_soldier) //创造最大堆
{
if(L==NULL)
{
L=new maxheap;
L->data=new int[Max+1]; //堆中的元素都是从0开始
L->data[0]=Max_soldier; //定义一个哨兵最大元素
L->Size=0;
L->capacity=Max;
}
else
{
cout<<"您已经初始化了呦"<<endl;
return ;
}
}
void insert_data(MaxHeap &L,int data) //最大堆插入节点
{
if(heap_full(L)==true) //如果这棵树已经满了
{
return ;
}
else
{
int i=L->Size+1; //指向要差插入节点的位置
while(L->data[i/2]<data)
{
L->data[i]=L->data[i/2];
i=i/2; //指向父节点
}
L->data[i]=data;
L->Size++;
}
}
void printlist(MaxHeap L,int e) //打印e节点到根节点的所有值
{
if(e<0||e>L->Size)
{
return ;
}
while(e>=1)
{
cout<<L->data[e];
e=e/2;
}
cout<<endl;
}