文章

54

粉丝

12

获赞

0

访问

5.5k

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

(1)采用递归遍历二叉树的方式计算 WPL:

  • 从根节点开始遍历,记录当前节点的深度
  • 若遇到叶节点(左右子树均为空),则计算该节点的带权路径长度(权值 × 深度)并累加到总和中
  • 若遇到非叶节点,则递归遍历其左、右子树,且深度增加 1
  • 最终累加的总和即为二叉树的 WPL

(2)二叉树结点的数据类型定义(4 分)

typedef struct BiTNode {
    int weight;               // 结点的权值,叶结点有实际意义
    struct BiTNode *left;     // 指向左子树的指针
    struct BiTNode *right;    // 指向右子树的指针
} BiTNode, *BiTree;           // BiTNo

 

(3) 算法描述(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);
}

// 调用示例(假设已构建二叉树root):
// int main() {
//     BiTree root; // 需先通过创建节点、连接左右子树来构建二叉树
//     CalculateWPL(root, 0); // 根节点初始深度为0(若认为根深度为1,可传1)...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发