二叉树计算带权路径长度(WPL)的算法

更多内容请访问点击我的主页

题目 :

二叉树的带权路径长度是二叉树中所有叶子结点的带权路径长度之和。给定二叉链表的存储的结点结构为

left weight right

weight存储的是叶子结点的非负权值。设计算法求二叉树的带权路径长度WPL。

WPL = ∑ 叶子结点的权值 × 结点到根结点的分支个数 1

例如:

非递归算法

  1. 算法思想:根据公式,需要记录每个结点到根结点的分支个数,这个过程通过对树进行广度遍历(借助队列)进行记录。
    在非叶子结点weight初值为-1,叶子结点初值设为非负权值。
    最后对队列进行逐个访问,如果weight != -1,那就计算该点。
wpl += (Q[i].p->weigth) * (Q[i].p->lno - 1);  //WPL公式代码

这里改造队列的结点结构

typedef struct
{LBTree* p;   //树的结点int lno;     //结点深度
}Queue;
  1. 伪代码
typedef struct
{LBTree* p;int lno;
}Queue;
int WPL(LBTree* lbt)
{Queue Q[maxSize];int front,rear;front = rear = 0;int Lno = 1;LBTree* q = lbt;Q[rear].p = q;Q[rear].lno = Lno;rear++;while (front != rear){q = Q[front].p;Lno = Q[front].lno;front++;if (q->lchild != NULL){Q[rear].p = q->lchild;Q[rear].lno = Lno + 1;rear++;}if (q->rchild != NULL){Q[rear].p = q->rchild;Q[rear].lno = Lno + 1;rear++;}}int wpl = 0;for (int i = 0; i < rear; i++){ if (Q[i].p->weigth != -1)wpl += (Q[i].p->weigth) * (Q[i].p->lno - 1);}return wpl;
}

递归算法 (推荐)

  1. 算法描述:本算法采用的是统计叶子结点算法基础上改造而来的。只是在参数列表定义了结点到根的分支个数。进行一个递归计算。统计结点数在个人主页有相关算法。
  2. 代码如下:
int WPLrec(LBTree* lbt,int n)
{int wpl = 0;if (lbt != NULL){if (lbt->lchild == NULL && lbt->rchild == NULL)wpl += n * lbt->weigth;wpl += WPLrec(lbt->lchild, n + 1);wpl += WPLrec(lbt->rchild, n + 1);}return wpl;
}

  1. 结点到根结点的分支个数 = 该结点的深度 - 1。 ↩︎

C++二叉树计算带权路径长度(WPL)的算法相关推荐

  1. wpl计算方法_C++二叉树计算带权路径长度(WPL)的算法

    题目 :二叉树的带权路径长度是二叉树中所有叶子结点的带权路径长度之和.给定二叉链表的存储的结点结构为 left | weight| right 存储的是叶子结点的非负权值.设计算法求二叉树的带权路径长 ...

  2. 二叉树的带权路径长度WPL算法实现

    文章目录 题目描述 算法思想 实现代码 题目描述  二叉树的带权路径长度WPL是二叉树中所有叶结点的带权路径长度之和.给定一棵二叉树,采用二叉链表存储,叶子结点的weight域为该结点的权值.请设计一 ...

  3. wpl计算方法_已知权值集合为{5,7,2,3,6,1,4},计算带权路径长度WPL()。

    [简答题]电路图绘制 [单选题]已知二叉树树形如 ,其后序遍历序列为 e,a,c,b,d,g,f ,在二叉树中与 b 同层次的结点是( ). [单选题]在一个顺序存储的循环队列中,若队尾指针指向队尾元 ...

  4. 带权路径长度wpl值_哈夫曼树带权路径长度怎么计算

    哈夫曼树的带权路径长度是什么? 1.树的路径长度 树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 2.树的带权路径长度(Weighted Pat ...

  5. 算法学习笔记——数据结构:哈夫曼树、带权路径长度WPL、哈夫曼编码

    引入 合并果子问题如下: 有n堆果子,每次可以合并任意两堆果子,耗费体力值为[两堆果子数之和],最终在n-1次合并后,得到一堆果子. 给出合并的方案,使得耗费的体力值最小 例如有3堆果子,质量依次为1 ...

  6. 哈夫曼带权路径长度C语言,解决关于哈夫曼编码计算带权路径长度问题

    这是在做一道编程提示遇到的,学习了一位博主的编码,其中有些问题未能理解,分析解决掉. 首先什么是哈夫曼树: 哈夫曼树,又称最优二叉树,是一类带权路径长度最短的树. 也就是根节点到节点的中的长度最小,当 ...

  7. 【哈夫曼树】带权路径长度WPL

    题目描述 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和. 输入 输入有多组 ...

  8. 哈夫曼树(带权路径长度+树的带权路径长度+哈夫曼树定义+构造哈夫曼树+哈夫曼树性质+哈夫曼编码+计算平均码长-这里指WPL)

    带权路径长度 树的带权路径长度WPL 哈夫曼树 哈夫曼树构造 哈夫曼树性质 哈夫曼编码 固定长度编码 可变长编码 前缀编码 固定长度编码.可变长编码.前缀编码.哈夫曼编码 思维倒图 试题

  9. JAVA实现二叉树带权路径长度和_哈夫曼树的构建与最小带权路径长度

    注意:哈夫曼树并不唯一,但带权路径长度一定是相同的. 二叉树:每个结点最多含有两个子树的树称为二叉树. 定理:对于具有n个叶子结点的哈夫曼树,共有2n-1个结点. 哈夫曼树介绍 1哈夫曼树的定义 哈夫 ...

最新文章

  1. pyhton3 rsa长加密/解密
  2. 2010有道难题练习赛2
  3. python教程:sum(1-2+3-4+...+99)
  4. cp命令复制目录 不覆盖
  5. 64位Outlook 无法与OC集成
  6. 了解spring-boot-starter
  7. 【Win 10 应用开发】RTM版的UAP项目解剖
  8. Hibernate中createCriteria即QBC查询的详细用法 .Hibernate中createCriteria即QBC查询的详细用法 ....
  9. pearson, kendall 和spearman三种相关分析方法的区别
  10. mysql 额外内存池_MySQL探秘(三):InnoDB的内存结构和特性
  11. javascript 事件冒泡处理方式
  12. PSIM 软件仿真三极管时报错及解决错误方法
  13. MQTT工作笔记0002---阿里云物联网简介_以及物联网平台下的一些名词
  14. element-ui源码阅读笔记(button篇)
  15. UI设计师(界面设计)面试题
  16. Qt交互界面设计探索
  17. 用Python制作我的核酸检测日历
  18. 外贸常用术语_常见国际贸易专业术语有哪些?
  19. webWorker 异步加载
  20. 计算机win10分区软件,如何利用Win10系统DiskPart工具进行GPT硬盘分区

热门文章

  1. 软件工程1:软件工程概念
  2. 知识管理——知识经济时代的增资利器
  3. JS写的数字拼图小游戏
  4. 一图让你秒懂——中国数据库的40年江湖 ​​​​
  5. 正大国际中消协提新能源车四大消费投诉,涉及锁电、智能辅助和刹车等
  6. 2-7 微信小程序计算器
  7. 卧薪尝胆~揭秘新型刷票骗局,击溃骗子的心肝脾肺肾!
  8. c语言---编写程序找出1000以内的完数
  9. 节日APP开发详细方案解析
  10. 深入浅出seesion和cookie