文章

54

粉丝

12

获赞

0

访问

5.5k

头像
2014年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年9月5日 19:21
阅读数 56

(1) 算法基本设计思想

采用递归遍历二叉树,同时记录当前节点的 “深度”。若遇到叶节点(左右子树均为空),则将 “节点权值 × 深度” 累加到总 WPL 中;若不是叶节点,则继续递归遍历其左右子树,且深度加 1(因为子节点深度比父节点大 1)。

(2) 二叉树结点的数据类型定义(C 语言)

c

typedef struct BiTNode {
    int weight;           // 节点权值(叶节点为非负有效权值)
    struct BiTNode *left; // 指向左子树的指针
    struct BiTNode *right;// 指向右子树的指针
} BiTNode, *BiTree;

(3) 算法描述(C 语言,递归实现)

c

int WPL = 0; // 全局变量,存储带权路径长度的总和

void CalculateWPL(BiTree root, int depth) {
    if (root == NULL) { // 空节点,直接返回
        return;
    }
    // 若为叶节点(左右子树均为空),累加“权值×深度”到WPL
    if (root->left == NULL && root->right == NULL) {
        WPL += root->weight * depth;
    }
    // 递归遍历左子树,深度+1
    CalculateWPL(root->left, depth + 1);
    // 递归遍历右子树,深度+1
    CalculateWPL(root->right, depth + 1);
}

评分及理由

(1)得分及理由(满分3分)

学生给出的算法基本设计思想正确,描述了通过递归遍历二叉树,记录节点深度,并在遇到叶节点时累加权值与深度的乘积到WPL。思路与标准答案中的先序遍历递归方法一致。因此得3分。

(2)得分及理由(满分4分)

学生给出的二叉树结点的数据类型定义正确,包含了weight、left和right字段,...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发