填空题

最优二叉树

发布于 2022-03-03 17:06:35

有一个节点数组,需要创建一棵最优二叉树,即每个节点的权值乘以节点在树中的长度,然后相加得到的值最小。以下图一为例,节点数组的[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 < cnt ++i) {
            if (arr[i].____________ >= 0)
                continue
            ++root_node
            if (min1 < 0) {
                min1 = i
            } else if (arr[i].val < ____________) { 
                min2 = min1
                min1 = i
            } else if (min2 < 0) {
                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
}

```

输入描述: 第一行为数据个数 第二行为权值(整数)输入样例: 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)) ```
关注者
0
被浏览
20
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看