已知一棵具有n个结点的完全二叉树被顺序存储在一维数组A[n]中,试编写一个算法输出A[i]结点的双亲和所有孩子。
哪位高手能帮我改改这个程序的,就最后一个函数好像不对。已知一棵具有n个结点的完全二叉树被顺序存储在一维数组A[n]中,试编写一个算法输出A[i]结点的双亲和所有孩子。
#include <iostream>
#define MAX 50
using namespace std;
//int input(int b[],int m);
void parent(int b[],int m);
void child(int b[],int n,int m);
int main()
{
int A[MAX],n,i,x;
cout<<"请输入二叉树的结点个数:";
cin>>n;
for (int j=0;j<n;j++)
{
cin>>x;
A[j+1]=x;
}
cout<<"请输入结点的位置:";
cin>>i;
parent(A,i);
cout<<"孩子节点为:";
child(A,n,i);
cout<<endl;
return 0;
}
void parent(int b[],int m)
{
if(m==1)
cout<<"无双亲"<<endl;
else
cout<<"双亲:"<<b[m/2]<<endl;
}
void child(int b[],int n,int m) // i为序号
{
int queue[MAX],front=0,tail=0,p,k=1;
fflush(stdin);// 队列作为辅助,存储孩子的序号
queue[0]=m;tail++;
while(front<tail)
{
p=queue[front++];
if(p!=m){ // 自身不输出
cout<<b[p]<<" ";
cout<<b[p+1]<<" ";
}
if(2*p<=n)
queue[tail++]=2*p;
else if(2*p+1<=n) queue[tail++]=2*p+1;
}
}