文章

103

粉丝

0

获赞

0

访问

4.0k

头像
2014年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年6月27日 17:31
阅读数 45

(1)递归实现

归思想:
定义一个递归函数,该函数接收当前结点指针和当前结点的深度作为参数。

  • 基本情况: 如果当前结点为空,直接返回0。
  • 递归情况:
    • 如果当前结点是叶结点(左右孩子都为空),则返回 当前结点权值 * 当前深度
    • 如果当前结点不是叶结点,则递归调用自身,分别处理左子树和右子树,将左子树返回的WPL和右子树返回的WPL相加。在递归调用时,传入的深度参数需要加1。

(2) 

typedef struct Bitree{
  int weight;
  struct Bitree *lchild,*rchild;
}Bitree,*Bitree;

(3)

#include <iostream>

// 假设我们已经定义了结点结构,如上面所示
typedef struct BiTNode {
    int weight;           // 结点的权值,如果是叶结点则有效,非叶结点可以忽略或设置为0
    struct BiTNode *lchild, *rchild; // 左右孩子指针
} BiTNode, *BiTree;

// 辅助函数:创建新结点(方便测试)
BiTree createNode(int w) {
    BiTree newNode = new BiTNode;
    newNode->weight = w;
    newNode->lchild = NULL;
    newNode->rchild = NULL;
    return newNode;
}

/**
 * @brief 递归计算二叉树的带权路径长度(WPL)
 * @param root 指向当前子树根结点的指针
 * @param depth 当前结点在二叉树中的深度(根结点深度为0)
 * @return 当前子树中所有叶结点的带权路径长度之和
 */
long long calculateWPL(BiTree root, int depth) {
    long long wpl = 0; // 初始化当前子树的WPL

  ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发