应用台导航页
  • 主页
  • 博客
  • 知识库
  • 工作台
  • 集萃
  • 友链
  • 关于
408计算机考研树大题

408计算机考研树大题

应试
更新于 2026-10-16
— 1472 字
返回

2014年

2014-41

【2014年题41】(13 分)二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树 T,采用二叉链表存储,结点结构如下:

其中叶结点的 weight 域保存该结点的非负权值。设 root 为指向 T 的根结点的指针,请设计求 T 的 WPL 的算法,要求:

1)给出算法的基本设计思想。

2)使用 C 或 C++语言,给出二叉树结点的数据类型定义。

3)根据设计思想,采用 C 或 C++语言描述算法,关键之处给出注释。

解析:

1)算法基本设计思想

二叉树的带权路径长度WPL = 所有叶子结点的权值 × 该叶子到根的路径长度之和。对二叉树进行 递归先序遍历 ,遍历的时候维护当前结点的路径深度(路径长度):

  1. 如果当前结点是叶子结点(left==null && right==null),把 weight × depth 累加到总WPL;
  2. 如果不是叶子,则递归遍历左子树、右子树,递归时深度+1;
  3. 空树直接返回0。

2)结点类型定义(C语言)

c
typedef struct BiTNode {
struct BiTNode *left;
int weight;
struct BiTNode *right;
} BiTNode, *BiTree;

3)算法代码

相关内容

  • 408计算机考研图大题

文章大纲

  • 2014年
    • 2014-41
  • 心得笔记

选项
文章 ID: 649

相关内容

  • 408计算机考研图大题

    408计算机考研图大题

    更新于2026-10-16

  • 408计算机考研数据结构树真题——选择题

    408计算机考研数据结构树真题——选择题

    更新于2026-10-16

  • 2021年英一范文有声书

    2021年英一范文有声书

    更新于2026-10-16

  • 9.1 二重积分的概念和性质

    9.1 二重积分的概念和性质

    更新于2026-10-16

  • 9.2 二重积分的计算技巧

    9.2 二重积分的计算技巧

    更新于2026-10-15

dors logoDors

Dors 是花野猫开发为知识工作者打造的数字花园应用,包含的博客、个人记事本、及其他实用功能。

花园

  • 花坛——博客
  • 果园——知识库

工坊——作者开发的实用工具

  • 小记
  • 秒切——一键按秒分割视频
  • 中国重点高校地理位置可视化网站
  • 中国行政区划数据查询平台
  • excel 重命名工具

misc

  • 生活章程
  • 画廊
  • just have fun!

© 2022 - present. All Rights Reserved.滇ICP备2025063395号-1

花野猫打造
c
// 递归遍历求WPL,depth为当前结点的路径长度,根节点depth=0
int getWPL(BiTree root, int depth){
if(root == NULL){
return 0; // 空结点贡献为0
}
// 判断是否是叶子结点
if(root->left == NULL && root->right == NULL){
return root->weight * depth;
}
// 非叶子,递归算左、右子树WPL,深度+1
int leftWPL = getWPL

迭代版

c
#include <queue>
int WPL(BiTree root){
if(!root) return 0;
queue<pair<BiTNode*,int>> q; // <结点,深度>
q.push({root,0});
int wpl = 0;
while(!q.empty()){
auto cur = q.front(); q.pop();

心得笔记

  1. typedef 关键字的作用是起别名
  2. struct BiTNode 是结构体定义,结构体用来把好几个变量打包在一起
  3. 结构体定义里面引用了自身类型的指针,别名未定义之前,要使用 struct BiTNode 这个完整的类型
  4. * left 是一个 struct BiTNode 类型的指针变量,指向另一个二叉树结点,如果没有就是 NULL
  5. -> 箭头运算符用来通过结构体指针访问结构体里面的成员。
  6. 结构体定义结束之后,后面还有 BiTNode 和 *BiTree ,都是别名,分别用来代替 struct BiTNode 和 struct BiTNode *

408计算机考研图大题

更新于2026-10-16

  • 408计算机考研数据结构树真题——选择题

    408计算机考研数据结构树真题——选择题

    更新于2026-10-16

  • 2021年英一范文有声书

    2021年英一范文有声书

    更新于2026-10-16

  • 9.1 二重积分的概念和性质
  • 9.2 二重积分的计算技巧

    9.2 二重积分的计算技巧

    更新于2026-10-15

  • (
    root
    ->
    left
    ,
    depth
    +
    1
    )
    ;
    int rightWPL = getWPL(root->right, depth + 1);
    return leftWPL + rightWPL;
    }
    // 对外调用入口
    int WPL(BiTree root){
    return getWPL(root, 0); // 根节点路径长是0
    }
    BiTNode
    *
    p
    =
    cur
    .
    first
    ;
    int d = cur.second;
    if(!p->left && !p->right){
    wpl += p->weight * d;
    }else{
    if(p->left) q.push({p->left, d+1});
    if(p->right) q.push({p->right, d+1});
    }
    }
    return wpl;
    }

    9.1 二重积分的概念和性质

    更新于2026-10-16