【408DS算法题】036基础-14年真题_求二叉树的WPL

news2024/12/22 17:10:13

Index

    • 真题题目
    • 分析实现
    • 总结

真题题目

二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树T ,采用二叉链表存储, 结点结构如下:
在这里插入图片描述其中叶结点的weight域保存该结点的非负权值。设root为指向T的根结点的指针, 请设计求T的WPL的算法, 要求:
1 - 给出算法的基本设计思想。
2 - 使用C或C++语言, 给出二叉树结点的数据类型定义。
3 - 根据设计思想,采用C或 C++语言描述算法,关键之处给出注释。


(本文重点关注算法实现及思路分析,不含具体答题表述)

分析实现

对于WPL的计算,首先想到是与结点深度有关的,那么在计算时就需要考虑将深度作为参数进行传递。

有了深度参数后,对二叉树进行遍历就可以轻松计算出WPL,此处采用后续遍历,具体实现如下:

// 计算WPL的辅助函数
int calWPLUtil(BTNode *root, int depth){
    if(root==NULL)
        return 0;
    if(root->left==NULL && root->right==NULL)
        return root->weight*depth;
        
    return calWPLUtil(root->left, depth+1)
        + calWPLUtil(root->right, depth+1);
}

// 计算WPL
int calWPL(BTNode *root){
    return calWPLUtil(root, 0);
}

总结

以上就是通过后序遍历计算二叉树的WPL的实现。

类似于二叉树转中缀表达式(传递深度)和判断顺序存储二叉树是否是BST(传递前驱元素),本题在实现的过程中也构建了辅助工具函数来传递额外的参数,这种思想在二叉树的递归中非常常用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2106543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贪心算法求无序数组最大递增序列

给定一个无序的数组&#xff0c;获取其最大的递增序列。下面使用贪心算法实现&#xff1a; 1、算法实现 void max_seq(int* arr,int len) {/// 标记递增序列的开始位置int start 0;/// 记录最大的递增序列数int max 0;int i 1;for( ; i<len; i){/// 如果当前元素大于…

【计算机组成原理】你知道什么是8421码、什么是余3码什么又是2421码吗?今天这篇文章带你认识计算机中的BCD码

BCD码 导读一、编码1.1 什么是编码&#xff1f;1.2 编码机制ASCII码非ASCII编码Unicode 二、 BCD码2.1 8421码小结 2.2 余3码2.3 2421码2.4 总结 结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 在上一篇内容中我们介绍了不同的进位…

github中action作用和讲解

1&#xff0c;简介 GitHub Actions 是 GitHub 的一个自动化功能&#xff0c;它允许你在 GitHub 仓库中自动执行软件开发工作流程。你可以使用 GitHub Actions 来执行各种任务&#xff0c;比如&#xff1a; 自动测试&#xff1a;每当代码被推送到仓库时&#xff0c;自动运行测试…

学生公寓单相费控电表的规格如何选择

石家庄光大远通电气有限公司学生公寓单相费控电表功能支持时间管理控制。L1、L2、L3可分别设置为工作日和节假日模式&#xff0c;每天多可设置8个时间段&#xff0c;每个时间段可分别设置为合闸状态或夜间模式&#xff0c;合闸时间段内电表保持合闸&#xff0c;夜间时间段内&am…

手机玩机常识-----小米系列机型 Android 15 更新计划 那些机型将会更新安卓15

小米机型是很多米粉最喜欢把玩的&#xff0c;其中解锁bl root 刷写twrp以及刷第三方系统资源相对其他品牌机型来说比较丰富。目前安卓15快要更新到很多机型。我们来了解下小米系列机型的更新计划是咋样的 小米会定期更新有关 Redmi红米 设备的支持日期的数据&#xff0c;包括可…

如何使用Spoon连接data-integration-server并在服务器上执行转换

1.建立连接 2.新建转换或任务 3.右键[子服务器]&#xff0c;新建一个服务器连接(data-integration-server服务器的连接信息) 4.右键[Run configurations],新建一个执行连接,勾选相应的选项即可: 5.选择服务器运行即可! 6.最后&#xff0c;你可以通过服务器端的WEB查看执行日志…

Kafka【八】如何保证消息发送的可靠性、重复性、有序性

【1】消息发送的可靠性保证 对于生产者发送的数据&#xff0c;我们有的时候是不关心数据是否已经发送成功的&#xff0c;我们只要发送就可以了。在这种场景中&#xff0c;消息可能会因为某些故障或问题导致丢失&#xff0c;我们将这种情况称之为消息不可靠。虽然消息数据可能会…

zoom缩放导致下拉框定位偏移问题

因为浏览器升级修改了zoom导致 https://developer.chrome.google.cn/release-notes/128?hlzh_tw 可根据zoom值计算相差偏移量 const isChromeHighVersion () > {const ua navigator.userAgent.toLowerCase();const chromeIndex ua.indexOf(chrome);if (chromeIndex >…

跑步戴的耳机哪个品牌的好?精选五款热门品牌骨传导耳机分享

近年来&#xff0c;骨传导耳机逐渐成为了人们喜爱的耳机之一。相比于传统的耳机&#xff0c;骨传导耳机不需要使用耳塞&#xff0c;就可以让用户在运动时更加自由自在&#xff0c;不受耳机带来的束缚感。然而&#xff0c;市面上的骨传导耳机品牌和型号众多&#xff0c;质量参差…

如何把大的txt文件拆分为小的文件?

命令&#xff1a;split 1. 功能&#xff1a;这个是一个Linux 命令&#xff0c;功能是一个大文件分割成多个较小的文件。 可以使用该命令的系统&#xff1a;在Linux 终端&#xff0c;或者是windows git bash 端口。 官方说明&#xff1a;在Linux 终端&#xff0c;或者是…

【生成模型系列(中级)】词向量维度选择的奥秘——从理论到实验的揭秘【通俗理解,代码模拟】

【通俗理解】词向量维度选择的奥秘——从理论到实验的揭秘 关键词提炼 #词向量 #维度选择 #最小熵原理 #Johnson-Lindenstrauss引理 #注意力机制 #图网络 第一节&#xff1a;词向量维度选择的类比与核心概念【尽可能通俗】 1.1 词向量维度选择的类比 词向量维度选择就像为一…

Git 使用指南 --- 版本管理

序言 Git 是一个开源的 分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。对一个程序员来说&#xff0c;掌握 Git 的使用是必要的。  在这个系列中&#xff0c;将详细的介绍 Git 的使用和原理&#xff0c;话不多说&#xff0c;让我们开始吧。…

C# 加解密之DES

说完了对称加密中的AES&#xff0c;这一篇再来介绍下DES。加解密原理什么的就不介绍了&#xff0c;大家可以自行百度&#xff08;主要我也不太明白&#xff0c;也不需要太明白&#xff09;&#xff0c;大致说一下两者的区别吧&#xff01; 首先肯定是加密算法的不同&#xff0…

模型大师们!答应我把这8本书翻烂好嘛?

模型大师们&#xff0c;准备好踏上一段深度学习与模型构建的路了吗&#xff1f; 这里有八本经典之作&#xff0c;它们将是你攀登知识高峰的阶梯! 从《PyTorch深度学习实战》到《大模型时代》 从掌握基础框架到洞悉大模型时代的变革 模型大师&#xff0c;准备好了吗&#xff…

RabbitMQ核心架构

RabbitMQ架构设计 Producer&#xff1a;负责产生消息。 Connection&#xff1a;RabbitMQ客户端和代理服务器之间的TCP连接。 Channel&#xff1a;建立在连接之上的虚拟连接&#xff0c;RabbitMQ操作都是在信道中进行。 Broker&#xff1a;一个Broker可以看做一个RabbitMQ服…

TP5发送邮件功能如何实现?怎么配置服务?

TP5发送邮件性能优化如何优化&#xff1f;怎么使用TP5发送邮件&#xff1f; 在现代Web开发中&#xff0c;TP5框架因其高效和灵活性而广受欢迎。无论是用于用户注册验证、密码重置还是定期通知&#xff0c;TP5发送邮件功能都能提供强大的支持。AokSend将详细介绍如何在TP5框架中…

开放式耳机和骨传导耳机哪个好?2024年开放式耳机排行榜10强

随着耳机市场的不断发展&#xff0c;开放式耳机和骨传导耳机逐渐成为两大热门选择。无论是追求高音质还是重视佩戴舒适度&#xff0c;消费者在选购耳机时都面临着一个重要问题&#xff1a;开放式耳机和骨传导耳机到底哪个更好&#xff1f;今天我们就来深入对比这两种耳机的优缺…

顶会最高分的文章怎么写?基于CNN的时间序列新SOTA就是最好的答案!

【时间序列CNN】&#xff08;卷积神经网络&#xff09;在近年来的深度学习领域中备受关注&#xff0c;它通过将卷积神经网络应用于时间序列数据&#xff0c;显著提升了模型在特征提取和模式识别任务中的表现。时间序列CNN技术已经在金融预测、健康监测和工业设备故障检测等多个…

竟然有50万个使用Flutter开发的应用了,这也太牛了!

近期工作比较清闲&#xff0c;在Flutter和React Native两者中犹豫学习哪个&#xff0c;做了不少功课&#xff0c;最终决定入手Flutter。原因很简单&#xff0c;感觉Flutter更有前景&#xff0c;另外B站也找到了适合自己学习的Flutter免费教程&#xff0c;天时地利人和&#xff…

进程的那些事——了解进程(虚拟地址空间)

目录 前言 一、程序地址空间&#xff08;虚拟地址空间&#xff09; 二、虚拟地址寻找物理内存 1.页表 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 程序和进程之间的区别&#xff1a; 进程&#xff1a;对用户而言&#xff0c;进程是运行中的…