求大佬看下这段代码的时间复杂度和空间复杂度,一直不太会算这个
#include <stdio.h>
typedef struct
{
double weight;
int parent;
int lchild, rchild;
}Node;
typedef struct
{
int node[12];
int s;
}Code;
Node HN[12];//因为有六个叶子节点所以定义十二个节点
Code HC[12];
int n;
#define MAX 59
void CreateTree()//构建哈夫曼树
{
int i, j;
printf("输出叶子节点个数\n");
scanf("%d", &n);
for (i = 1; i < 2 * n; i++)
{
HN[i].parent = -1;
HN[i].weight = 0;
HN[i].lchild = -1;
HN[i].rchild = -1;
}
double a, b;
int x1,x2;
printf("输入各个节点权重:\n");
for (i = 1; i <= n; i++)//输入权值
{
scanf("%lf", &HN[i].weight);
}
for (i = 1; i < n;i++){
a = MAX;
b = MAX;
x1 = 0;
x2 = 0;
for (j = 1; j < n + i; j++)
{
if (HN[j].parent == -1 && HN[j].weight < a)
{
b = a;
x2 = x1;
x1 = j;
a = HN[j].weight;
}
else{
if (HN[j].parent == -1 && HN[j].weight < b)
{
x2 = j;
b = HN[j].weight;
}
}
}
HN[x1].parent = n + i;
HN[x2].parent = n + i;
HN[n + i].lchild = x1;
HN[n + i].rchild = x2;
HN[n + i].weight = HN[x1].weight + HN[x2].weight;
}
}
void CreateNode()
{
Code tem;
int i, j;
int t, p;
for (i = 1; i <= n; i++)
{
tem.s = n;
t = i;
p = HN[t].parent;
while (p != -1)
{
if (HN[p].lchild == t)
{
tem.node[tem.s] = 0;
}
else if(HN[p].rchild == t)
{
tem.node[tem.s] = 1;
}
tem.s--;
t = p;
p = HN[t].parent;
}
for (j = tem.s + 1; j <= n; j++)
{
HC[i].node[j] = tem.node[j];
}
HC[i].s = tem.s;
}
}
void Printf()
{
int i, j;
printf("每个叶子节点的哈夫曼编码:\n");
for (i = 1; i <= n; i++)
{
for (j = HC[i].s + 1; j <= n; j++)
{
printf("%d", HC[i].node[j]);
}
printf("\n");
}
}
int main()
{
CreateTree();
CreateNode();
Printf();
return 0;
}