20240904 华为笔试 二叉树消消乐

文章目录

  • 题目
  • 解题思路
  • 代码
    • BUG 代码
    • 最终代码

题目

  • 题目描述
    给定原始二叉树和参照二叉树(输入的二叉树均为满二叉树,二叉树节点的值范围为[1,1000],二叉树的深度不超过1000),现对原始二叉树和参照二又树中相同层级目值相同的节点进行消除,消除规则为原始二叉树和参照二又树中存在多个值相同的节点只能消除等数量的,消除后的节点变为无效节点,请按节点值出现频率从高到低输出消除后原始二叉树中有效节点的值(如果原始二叉树消除后没有有效节点返回0)。
  • 解答要求
    时间限制: C/C++ 1000ms, 其他语言:2000ms
    内存限制: C/C++256MB,其他语言:512MB
  • 输入
    原始二叉树中的节点个数
    原始二叉树
    参照二叉树中的节点个数
    畚照二叉树
  • 输出
    原始二叉树中有效节点的值,按出现频率从高到低排序(相同频率的值按大小排序),相同频率的值按降序排列。
  • 样例1
    输入:
    7
    1 3 3 3 4 5 6
    3
    2 3 4
    输出:
    36541
    解释:
    原始二叉树A消除参照二叉树B中的重复元素后,有效节点剩余2个3,1个6,1个5,1个4,1个1,3出现的频率2,6、5、4、1出现的频率为1,按值从大到小排序,所以排序结果为36541。
    在这里插入图片描述
  • 样例2
    输入:
    15
    5 6 6 6 7 7 7 8 8 9 9 7 7 5 6
    7
    5 6 6 7 7 8 8
    输出:
    79865
    解释:
    原始二叉树A消除参照二叉树B中的重复元素后,有效节点剩余3个7,2个9,2个8,2个6,1个5,8出现的频率为3,7出现的频率为2,6出现的频率为2,6的值比5大,所以排序结果为79865
    在这里插入图片描述
  • 样例3
    输入:
    7
    1 3 4 3 2 2 6
    3
    2 4 3
    输出:
    2631
    解释:
    原始二叉树A消除参照二叉树B中的重复元素后,有效节点剩余2个2,1个6,1个3,1个1;2出现的频率2,6、3、1出现的频率为1,按值从大到小排序,所以排序结果为2631。
    在这里插入图片描述

解题思路

  • main 函数内分别 构造两个 vector 存入原始二叉树和参照二叉树的信息 ,构造1个结果map表示原始参考树剩余有效节点及其数量,初始化层数 n2=0。
  • 遍历提取出原始二叉树和参考二叉树每一层的数据
    对二叉树的第i个元素进行遍历,判断当前元素是否是该层的首元素(i==pow(2,n2-1)),若不是则继续遍历;若该元素是该层的首元素,则 提取出原始二叉树和参考二叉树中该层的所有元素,分别存入两个 map,表示该层节点的数值及其数量。
    遍历参考树该层的节点,对原始树该层的数据抵消,最后存储剩余节点及数量
    对参考树该层的数据进行遍历,并在原始二叉树中查找该数据,若能找到,则把该数据在原始二叉树这一层的数量 减去 在参考二叉树这一层的数量。
    对原始参考树该层的数据进行遍历,若该数据的数量大于0,则表示该数据为有效节点,则将该数据及其数量存入结果map中。该层处理结束后,将层数n2++,继续遍历下一个节点i+1的元素。
  • 若结果中有效节点数为空则直接输出0,否则按照节点数和节点数值排序输出
    构造1个vector用于排序,vector中的每一个元素都是一个 pair<int,int> ,表示剩余有效节点及其数量。构造1个排序规则函数对这个vector进行排序:若节点数相同则按照节点数值排序,否则按照节点数量排序。

代码

BUG 代码

  • BUG 代码:没有考虑样例3这样的情况,该代码只是按照相同位置的相同元素进行了抵消,应当按照每一层的相同元素进行抵消。
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>using namespace std;bool compare(const pair<int, int>& a, const pair<int, int>& b) {if (a.second == b.second) {return a.first > b.first; //相同频率时,按值降序排序}return a.second > b.second;   //按频率降排序
}int main() {int n, m;vector<int> res_vec;cin >> n;vector<int> n_vec(n);for (int i = 0; i < n; ++i) {cin >> n_vec[i];}cin >> m;vector<int> m_vec(m);for (int i = 0; i < m; ++i) {cin >> m_vec[i

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

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

相关文章

Tetra Pak利乐触摸屏维修beijer北尔触摸屏维修E1151

TetraPak利乐包装机触摸显示屏维修&#xff0c;北尔全系列型号触摸屏修理 维修注意事项&#xff1a; 上电前&#xff0c;应检查负载是否接上或是否正确&#xff1b; 测量电压时&#xff0c;确认档位是否在电压档。要确认仪器仪表的量程应大于测试点的电压&#xff1b; 更换电…

太速科技-607-基于FMC的12收和12发的光纤子卡

基于FMC的12收和12发的光纤子卡 一、板卡概述 本卡是一个FPGA夹层卡&#xff08;FMC&#xff09;模块&#xff0c;可提供高达2个CXP模块接口&#xff0c;提供12路收&#xff0c;12路发的光纤通道。每个通道支持10Gbps,通过Aurora协议&#xff0c;可以组成X4&#xff0…

嵌入式学习-线性表Day05-双向链表

嵌入式学习-线性表Day05-双向链表 双向链表 操作函数 1&#xff09;创建一个空的双向链表 2&#xff09;双向链表中间插入 3)双向链表尾插 4&#xff09;双线链表中间删除 5&#xff09;双线链表删除最后一个节点 双向循环链表 双向链表 //双向链表的节点定义 typedef int dat…

力扣题11~20

题11&#xff08;中等&#xff09;&#xff1a; 思路&#xff1a; 这种题目第一眼就是双循环&#xff0c;但是肯定不行滴&#xff0c;o(n^2)这种肯定超时&#xff0c;很难接受。 所以要另辟蹊径&#xff0c;我们先用俩指针&#xff08;标志位&#xff09;在最左端和最右端&am…

补图、同构图、自补图是什么意思

补图、同构图、自补图的解释网上很多文章写的不是很明确&#xff0c;所以我写一段小笔记记录一下。 同构图 同构图的数学定义为&#xff1a;给定两个图G(V,E)和G(V,E)&#xff0c;若存在一个双射函数f:V->V&#xff0c;使得对于任意的顶点u,v∈V&#xff0c;(u,v)∈E当且仅…

日语学习零基础生活日语口语柯桥外语学校|股票用日语怎么说?

在日语中&#xff0c;“股票”可以说&#xff1a; • 株&#xff08;かぶ&#xff09; 这是最常用的表达方式&#xff0c;直接表示“股票”。 例如&#xff1a; 株を買う - 买股票 株を売る - 卖股票 • 株式&#xff08;かぶしき&#xff09; 这个词也是“股票”的意…

回答网友的一个问题socket_server的问题

今天网上有人讨论在Midas数据库编程中&#xff0c;如果客户端采用Socket连接&#xff0c;服务端运行Borland Socket Server程序&#xff0c;在服务器&#xff08;一个CPU以上&#xff09;上运行有问题。俺就找出了这个&#xff1a;

【工具使用】使用Docsify搭建个人文档网站

检查Node.js安装状态 首先&#xff0c;打开命令提示符&#xff08;CMD&#xff09;&#xff0c;输入以下命令以验证Node.js是否已经安装在您的电脑上&#xff1a; node -v安装Docsify CLI工具 接下来&#xff0c;通过以下命令全局安装Docsify的命令行工具&#xff1a; npm …

布隆过滤器(Bloom Filter)详解

一、引言 在处理大量数据的场景中&#xff0c;我们经常会遇到判断一个元素是否在某个集合中的问题。传统的方法可能是使用 HashMap 等集合将数据保存起来&#xff0c;然后进行比较确定&#xff0c;但在元素很多的情况下&#xff0c;这种方式会非常浪费空间&#xff0c;检索速度…

知识蒸馏介绍

一、知识蒸馏介绍 1.1 概念介绍 知识蒸馏&#xff08;knowledge distillation&#xff09;是模型压缩的一种常用的方法&#xff0c;不同于模型压缩中的剪枝和量化&#xff0c;知识蒸馏是通过构建一个轻量化的小模型&#xff0c;利用性能更好的大模型的监督信息&#xff0c;来…

极客兔兔Gee-Cache Day7

protobuf配置&#xff1a; 从 Protobuf Releases 下载最先版本的发布包安装。解压后将解压路径下的 bin 目录 加入到环境变量即可。 如果能正常显示版本&#xff0c;则表示安装成功。 $ protoc --version libprotoc 3.11.2在Golang中使用protobuf&#xff0c;还需要protoc-g…

高效编辑修改文本文档:批量修改文本文档中的特定词汇

在处理大量文本文档时&#xff0c;经常需要批量修改文章的内容&#xff0c;特别是当多个文档里的内容&#xff0c;手动逐个修改不仅效率低下&#xff0c;还容易出错。因此&#xff0c;掌握一些批量修改文本文档内容的技巧变得尤为重要。本文将介绍几种高效编辑文章的方法&#…

基于IMX6UL的EPIT的定时器实验

定时器是最常用的外设&#xff0c;常常需要使用定时器来完成精准的定时功能&#xff0c;I.MX6U 提供了多 种硬件定时器&#xff0c;有些定时器功能非常强大。本章我们从最基本的 EPIT 定时器开始&#xff0c;学习如何配置EPIT 定时器&#xff0c;使其按照给定的时间&#xff0c…

k8s部署学习

8s的架构 一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成&#xff0c;每个节点上都会安装不同的组件 1 master&#xff1a;集群的控制平面&#xff0c;负责集群的决策 ApiServer : 资源操作的唯一入口&#xff0c;接收用户输入的命令&#xff0c;提供认证、…

Java中对象的比较(equals、Comparable、Comparator)

文章目录 一、PriorityQueue中插入对象二、元素的比较 2.1、基本类型的比较2.2、对象比较的问题三、对象的比较 3.1、覆写基类的equals3.2、基于Comparable接口类的比较3.3、基于比较器比较3.4、三种方式对比 一、PriorityQueue中插入对象 前篇我们讲解了优先级队列&#xff0…

qt小练习

制作简易闹钟 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> //定时器类 #include <QDebug> //信息调试类 #include <QMessageBox> //消息对话框类 #include <QTime> //时间类 #include…

大模型日报|4 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.清华、北航团队推出多智能体代码异常处理框架 Seeker 在现实世界的软件开发中&#xff0c;异常处理不当或缺失会严重影响代码的鲁棒性和可靠性。异常处理机制要求开发人员按照高标准来检测、捕获和管理异常&#x…

全网最详细k8s搭建部署

目录 Kubernetes的功能&#xff1a; Kubernetes的特点&#xff1a; 1. 安装要求 2. 部署内容 1、系统环境准备 2、所有禁用swap和本地解析 3、仓库配置&#xff0c;所有安装docker 4、所有节点设定docker的资源管理模式为systemd 5、所有阶段复制harbor仓库中的证书并…

python中计算分布的分位数及累积概率

本文讨论python中怎样计算分布的分位数及累积概率 ⭐️ 根据累计概率获取分位数 在 Python 中&#xff0c;你可以使用 scipy.stats 中的 ppf&#xff08;percent point function&#xff09;来根据累积概率获取分位数。ppf 是逆累积分布函数&#xff0c;也就是根据给定的累积…

前端笔记(一):父传子,子传父,获取DOM对象或组件,别名路径联想设置,elemntPlus

一、父传子 二、子传父 三、获取DOM对象或组件 把子组件的属性暴露给父组件 四、别名路径联想设置 1.jsconfig里只做联想配置&#xff1b; 2.vue.config.js里做实际转换&#xff0c;把转为src&#xff1b; 五、elemntPlus 1.按需导入 ①npm install element-plus --sav…