有一个节点数组,需要创建一棵最优二叉树,即每个节点的权值乘以节点在树中的长度,然后相加得到的值最小。以下图一为例,节点数组的[A,B,C,D,E]的权值分别为[15,7,6,6,5],构建好的最优二叉树见图二。 相关代码如下,请补充缺失部分。 ``` struct node { int left, right, parent; int val; }; int build_tree(struct node arr[], int cnt) { while (1) { int i; int min1 = -1; 权值最小的节点编号 int min2 = -1; 权值第二小的节点编号 int root_node = 0; 根节点(没有父节点)的个数 for (i = 0; i if (arr[i].____________ = 0) continue; ++root_node; if (min1 min1 = i; } else if (arr[i].val min2 = min1; min1 = i; } else if (min2 min2 = i; } else if (arr[i].val min2 = i; } } if (root_node break; arr[cnt].left = min2; arr[cnt].right = min1; arr[cnt].val = arr[min1].val + ____________; arr[cnt].parent = -1; arr[min1].parent = cnt; arr[min2].parent = cnt; ++cnt; } return cnt; } ```
输入描述:
第一行为数据个数 第二行为权值(整数)


输出描述:
构建的二叉树(用于绘图软件生成对应的二叉树图形)
示例1

输入

5
15 7 6 6 5

输出

```mermaid
graph TD
	n0[n0:15]
	n0 --> n8
	n1[n1:7]
	n1 --> n6
	n2[n2:6]
	n2 --> n5
	n3[n3:6]
	n3 --> n6
	n4[n4:5]
	n4 --> n5
	n5((11))
	n5 --> n7
	n6((13))
	n6 --> n7
	n7((24))
	n7 --> n8
	n8((39))
```

说明

1.grath TD下面的输出都是\t开头
2.n0 ---> n8 的意思是n0的父节点是n8
加载中...