#include<stdio.h> typedef struct { int data[100]; int parent ,lchild,rchild; }qqq; typedef struct { qqq data[100]; int parent ,lchild,rchild; }ppp; int main(){ ppp p; int temp; int i,j=0,num=0; int aa[100]; //相加构成一个父结点 ,其相加的两位为左右孩子结点 //第一步执行 j++; aa[0]=3; aa[1]=4; aa[2]=5; aa[3]=6; aa[4]=7; temp=aa[0]+aa[1];// temp=7; p.data[0].parent =temp; p.data[0].lchild=aa[0]; p.data[0].rchild=aa[1]; printf("%d ",p.data[0].parent); //不在路劲长度内 7 printf(" %d",p.data[0].lchild); printf(" %d",p.data[0].rchild); //第二步执行 j++; aa[0]=5; aa[1]=6; aa[2]=7; aa[3]=7; temp=aa[0]+aa[1];// temp=11; p.data[1].parent =temp; p.data[1].lchild=aa[0]; p.data[1].rchild=aa[1]; printf("\n%d ",p.data[1].parent); //不在路劲长度内 14 printf(" %d",p.data[1].lchild); //不在路劲长度内 7 printf(" %d",p.data[1].rchild); //第三步执行 j++; aa[0]=7; aa[1]=7; aa[2]=11; temp=aa[0]+aa[1];// temp=14; p.data[2].parent =temp; p.data[2].lchild=aa[0]; p.data[2].rchild=aa[1]; printf("\n%d ",p.data[2].parent); //不在路劲长度内 11 printf(" %d",p.data[2].lchild); printf(" %d",p.data[2].rchild); //第四步执行 j++; aa[0]=11; aa[1]=14; temp=aa[0]+aa[1];// temp=25; p.data[3].parent =temp; p.data[3].lchild=aa[0]; p.data[3].rchild=aa[1]; printf("\n%d",p.data[3].parent); //不在路劲长度内 25 printf(" %d",p.data[3].lchild); //不在路劲长度内 14 printf(" %d",p.data[3].rchild); //不在路劲长度内 11 for(i=j-1;i>0;i--){//j-i代表权 ,并且除去重复计算的结点 num=num+p.data[i].lchild*(j-i); num=num+p.data[i].rchild*(j-i); } printf("\n%d",num); }