输入:一个按层输入的完全二叉树
输出:每个节点的亲子关系
因为是二叉树,可以直接用一位数组来存储,其中,对于节点i,它的父亲节点是i/2,i是偶数的时候节点是左孩子,奇数的时候节点是右孩子,它的左孩子是2*i,右孩子是2*i+1。
注意:在数组中存储时,下标志从1开始。
代码如下:
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxx=300;
int main(){
int n;
cin>>n;
int A[maxx];
for(int i=1;i<=n;i++) cin>>A[i];
for(int i=1;i<=n;i++){
printf("node %d: key = %d, ",i,A[i]);
if(i/2>0) printf("parent key = %d, ",A[i/2]);
if(2*i<=n) printf("left key = %d, ",A[i*2]);
if(i*2+1<=n) printf("right key = %d, ",A[i*2+1]);
printf("\n");
}
return 0;
}
错点:
1.输出格式注意“,”跟在前一个里面。