2014年408算法题

news2025/1/10 19:02:03

文章目录

  • 0 结果
  • 1 题目
  • 2 思路

0 结果

请添加图片描述

1 题目

请添加图片描述

2 思路

二叉树的带权路径长度(WPL)的计算方法有两种:

  • 1,定义: W P L = 所有叶结点的权值 W i ∗ 该结点深度 D i 求和 WPL=所有叶结点的权值W_i*该结点深度D_i求和 WPL=所有叶结点的权值Wi该结点深度Di求和
  • 2,在哈夫曼树中, W P L = 所有非叶结点的权值和 WPL=所有非叶结点的权值和 WPL=所有非叶结点的权值和

本题只能使用方法1,代码如下所示:

#include <cstdio>
#include <cstdlib>
#include <vector>
using std::vector;

typedef struct BTNode{
    int weight;
    struct  BTNode *left, *right;
}BTNode;

int WPL = 0;

//前序遍历
void preOrder(BTNode* p, int d){//d:深度
    if(p == nullptr) return;
    if(p->left == nullptr && p->right == nullptr)//叶结点
        WPL += d*p->weight;
    preOrder(p->left, d + 1);
    preOrder(p->right, d + 1);
}

void ans(BTNode* root){
    preOrder(root, 0);
}

//中序序列
int in[] = {45, 100, 12, 25, 13, 55, 5, 14, 9, 30, 16};
//根据中序和层序创建二叉树
BTNode* Create4(vector<int> layer, int inL, int inR){
    if(layer.size() == 0){//当前层序遍历完
        return NULL;
    }

    BTNode* root = new BTNode;
    root->weight = layer[0];

    int k;
    for (k = inL; k <= inR; ++k) {//中序序列中寻找根结点
        if(in[k] == root->weight){
            break;
        }
    }

    vector<int> leftLayer;//左子树层次遍历
    vector<int> rightLayer;//右子树层次遍历

    for (int i = 1; i < layer.size(); ++i) {//遍历层序序列,分左右子树存储
        bool isLeft = false;
        for (int j = inL; j < k; ++j) {
            if(layer[i] == in[j]){
                isLeft = true;
                break;
            }
        }
        if(isLeft == true){
            leftLayer.push_back(layer[i]);
        }else{
            rightLayer.push_back(layer[i]);
        }
    }

    root->left = Create4(leftLayer,inL, k - 1);
    root->right = Create4(rightLayer,k + 1, inR);

    return root;
}

int main(){
    vector<int> layer;//中序序列
    layer.push_back(100);
    layer.push_back(45);
    layer.push_back(55);
    layer.push_back(25);
    layer.push_back(30);
    layer.push_back(12);
    layer.push_back(13);
    layer.push_back(14);
    layer.push_back(16);
    layer.push_back(5);
    layer.push_back(9);

    BTNode * root  = Create4(layer,  0, sizeof(in)/sizeof(in[0]));
    ans(root);
    printf("%d", WPL);

    return 0;
}


例子中的二叉树如下图所示:
请添加图片描述

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

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

相关文章

linux环境minio安装启动,管理员登录,nginx代理

一.下载minio 官网下载: MinIO | Code and downloads to create high performance object storage 直接点击下载或者用wget https://dl.min.io/server/minio/release/linux-amd64/minio 最后都是得到一个文件minio(大概100M) 二.启动minio 1.创建文件夹,比如 mkdir /data…

mysql的redolog、undolog、binlog介绍,及mysql两阶段提交

https://blog.csdn.net/weixin_45676738/article/details/124770085 https://blog.csdn.net/TABE_/article/details/124935324 三种log REDO LOG 称为 重做日志 &#xff0c;提供再写入操作&#xff0c;恢复提交事务修改的页操作&#xff0c;用来保证事务的持久性。 UNDO LOG 称…

电源管理系统的功能和发展前景分析

电源对于电子设备的重要性不言而喻&#xff0c;电源管理系统是将电源有效分配给系统中的不同组成&#xff0c;在电子设备中起到了电能变换、控制、检测等作用&#xff0c;保证系统的稳定运行&#xff0c;对设备的性能有着直接影响&#xff0c;广泛用在工业、新能源、机器设备、…

一、初识 Spring 框架

文章目录一、Spring 简介二、Spring 框架的优点三、Spring 框架的组成四、Spring 框架 学习路线一、Spring 简介 Spring 框架简介 2004年3月24日发布了Spring 1.0正式版&#xff0c;Spring 框架的诞生给整个软件行业带来了春天。这个框架极大程度上简化了开发&#xff0c;其本…

基于无人机和背负式激光雷达点云的黄河三角洲刺槐林地上生物量估算

论文标题&#xff1a;Estimation of aboveground biomass of Robinia pseudoacacia forest in the Yellow River Delta based on UAV and Backpack LiDAR point clouds ABSTRACT 人工林是陆地碳汇的重要来源。黄河三角洲刺槐林是我国最大的人工生态防护林。然而&#xff0c;自…

“深度学习”学习日记。与学习有关的技巧--超参数的验证

2023.1.31 超参数是指神经网络中&#xff0c;神经元的数量、batch的大小、参数更新时的学习率或权值衰减等&#xff0c;虽然超参数的取值非常重要&#xff0c;但是决定超参数的值时会伴随很多人工的试错&#xff0c;所以我们需要高效地寻找超参数的值的方法 一&#xff0c;验…

【4】【Spring】,【Ioc/DI】,【IoC容器】,【Bean】

1、Ioc/DI,IoC容器&#xff0c;Bean 为了解决不同实现方式耦合度高 Ioc&#xff1a;&#xff08;Inversion of Control&#xff09;控制反转 主要思想&#xff1a;使用对象时&#xff0c;由主动new产生对象转换为由外部提供对象&#xff0c;此过程中对象创建控制权由程序转移…

vite打包静态文件打开显示空白

vite 打包生成静态文件打开显示空白 需求场景 本地调试访问打包的文件看是否有啥问题&#xff0c;方便定位线上问题安卓手机需要去直接访问静态文件&#xff0c;而不是访问域名的情况 vite 打包生成的文件如果直接放在服务器中是可以正常访问的&#xff0c;但是本地直接访问…

三个方面使CRM在360度客户视图中受益

360度客户视图这个词相信您不会陌生&#xff0c;很多关于CRM客户管理系统的文章中都有所提及。所谓的360度客户视图&#xff0c;是帮助企业和业务人员建立客户认知&#xff0c;消除客户生命周期中的信息脱节&#xff0c;让业务人员为客户提供一致性的体验。接下来我们们说&…

Windows10神州网信版的安装

在大约20天里面我完成了Windows10神州网信版72台的安装&#xff0c;有些2009&#xff5e;2014年的计算机完成安装后做一般的办公应用也能流畅运行。买一台新的计算机至少要好几千&#xff0c;通过更换固态硬盘和内存条可以达到旧物新用的目的。 一、安装过程   1、检查硬件  …

Coggle 30 Days of ML(23年1月)打卡

前言 任务链接 这个任务内容比较感兴趣而且和工作内容相关&#xff0c;学习一下打个卡。 编码完成任务1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;6&#xff0c;目前手上只有2080&#xff0c;之后在3090上跑。 最近杂事多&#xff0c;笔记、任务4和7之后再补充。 …

vue前端框架课程笔记(五)

目录非文件组件使用步骤定义组件示例&#xff08;第一部分&#xff09;&#xff1a;使用Vue.extend函数创建三个组件注册组件示例&#xff08;第二部分&#xff09;&#xff1a;组件的全局和局部注册组件使用示例&#xff08;第三部分&#xff09;&#xff1a;编写组件标签最终…

软件工程(三)——需求工程、需求开发、需求定义

目录 一、需求定义 二、需求验证 三、需求管理 1.定义需求基线 2.需求跟踪 3.变更控制 四、软件系统建模 一、需求定义 把已经分析好的需求&#xff0c;落成文档&#xff0c;把东西记录下来&#xff0c;成为《需求规格说明书》。需求定义的方法有严格定义法 以及 原型法…

Java三路快速排序

概念 三路快速排序&#xff1a; 是双路快速排序的进一步改进版本&#xff0c;三路排序算法把排序的数据分为三部分&#xff0c;分别为小于 v&#xff0c;等于 v&#xff0c;大于 v&#xff0c;v 为标定值&#xff0c;这样三部分的数据中&#xff0c;等于 v 的数据在下次递归中…

QSplitter学习笔记

QSplitter是分割窗口控件&#xff0c;并且可以拖动窗口来改变窗口的大小&#xff0c;是主界面显示时经常用到&#xff0c;本篇介绍它的交互操作。QSplitter可以容纳多个Widget&#xff0c;具有布局的特点&#xff0c;并且可以动态调整各个Widget的大小。QSplitter布局有两种方式…

前端学习第五站——CSS学习进阶篇

目录 一、选择器进阶 1. 后代选择器&#xff08;空格&#xff09; 2. 子代选择器 > 3. 并集选择器&#xff1a;&#xff0c; 4. 交集选择器&#xff1a;紧挨着 5. hover伪类选择器 6. emmet语法 7. 选择器总结 二、背景相关属性 1. 背景颜色 2. 背景图片 3. 背景…

若依框架对接LDAP

这里直接使用spring ldap实现认证。 背景在若依框架上对接LDAP 代码 引入依赖 <!-- 对接ldap --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-ldap</artifactId></dependency>…

React-Native 开发实用指南|环信学院

本文主要介绍 React-Native 的实际使用经验&#xff0c;对于想要快速入门的同学是有帮助的。 作者 | 佐玉 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 1、整体介绍 首先说&#xff0c; React-Native 用来做什么&#xff1f;传统的开发中&#xff0c;按照平…

编译原理学习笔记16——语义分析和中间代码生成1

编译原理学习笔记16——语义分析和中间代码生成116.1 中间语言16.2 常用的中间语言形式16.1 中间语言 中间语言的特点和作用 特点 独立于机器复杂性界于源语言和目标语言之间 引入中间语言的优点 使编译程序的结构在逻辑上更为简单明确便于进行与机器无关的代码优化工作易于移…

力扣刷题|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

LeetCode 110.平衡二叉树 题目链接&#x1f517; LeetCode 110.平衡二叉树 思路 递归三部曲分析&#xff1a; 明确函数的形参和返回值 参数&#xff1a;当前传入结点 返回值&#xff1a;以当前传入结点为根节点的树的高度 那么如何标记左右子树是否差值大于1呢&#xff…