1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol AI分析

思路:小根堆/排序+贪心+DFS

首先根据哈夫曼树的定义,可以使用贪心的方式构建哈夫曼树,离根节点的距离越远,则该点的权值需要越小,否则会使得带权路径长度增大,而不是最短带权路径长度了。

我们可以使用排序或者一个小根堆来去构建哈夫曼树,每次取出小根堆的最小权值的两个节点,生成他们的父节点,然后将父节点添加进小根堆中,直到堆中元素为1,构造结束。

最终,最后堆中剩下的那个元素,就是整个哈夫曼树的根节点,然后从根节点开始跑一遍DFS的中序遍历即可

P3028.生成哈夫曼树(100分)

    1000ms Tried: 346 Accepted: 45 Difficulty: 6 所属公司 : 华为od
    算法与标签>贪心算法

题目描述

给定长度为 nnn 的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于 111 。请完成一个函数,根据输入的数字数组,生成哈夫曼树,并将哈夫曼树按照中序遍历输出。 为了保证输出的二叉树中序遍历结果统一,增加以下限制:又树节点中,左节点权值小于等于右节点权值,根节点权值为左右节点权值之和。当左右节点权值相同时,左子树高度高度小于等于右子树。 注意:所有用例保证有效,并能生成哈夫曼树提醒:哈夫曼树又称最优二叉树,是一种带权路径长度最短的一叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为 000 层,叶结点到根结点的路径长度为叶结点的层数)

输入描述

例如:由叶子节点 555 151515 404040 303030 101010 生成的最优二叉树如下图所示,该树的最短带权路径长度为 40∗1+30∗2+15∗3+5∗4+10∗4=20540 * 1 + 30 * 2 + 15 * 3 + 5 * 4 + 10 * 4 = 205 40∗1+30∗2+15∗3+5∗4+10∗4=205。

image

输出描述

输出一个哈夫曼的中序遍历数组,数值间以空格分隔

样例1

输入

5
5 15 40 30 10

输出

40 100 30 60 15 30 5 15 10

说明

根据输入,生成哈夫曼树,按照中序遍历返回。所有节点中,左节点权值小于等于右节点权值之和。当左右节点权值相同时左子树高度小于右子树。结果如上图所示。

image

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 0, 46ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?