java - 这是minheap的排序方式吗?
问题描述
我的教授声称我的 Minheap 在以下问题上不正确:
使用min heap down将以下数字转换为minheap并逐级绘制最终的 minheap 树和最终的数组内容。
给定数组:100 10 80 30 60 50 40 70 20 90
我的回答如下:
10
/ \
20 40
/ \ / \
30 60 80 50
/\ /
100 70 90
排序数组:10,20,40,30,60,80,50,100,70,90
我不正确吗?
解决方案
Min-Heap 是一棵完全二叉树,其中每个内部节点中的值都小于或等于该节点子节点中的值。将堆的元素映射到数组中很简单:如果一个节点存储了一个索引 k,那么它的左子节点存储在索引 2k + 1 处,而它的右子节点存储在索引 2k + 2 处。
你的答案是对的,你错过了 70 和 100,这是错误的,否则它是正确的
排序后的数组将是
10,20,40,30,60,50,80,70,100,90
推荐阅读
- highcharts - 如何在线条下添加单独的标记(箭头)
- c++ - C++ Array of Array Products :exited,segmentation fault
- c# - 如何在 C# 中暂停计时器直到程序完成
- javascript - Uncaught (in promise) TypeError: type.trim is not a function
- azure-resource-manager - 如何在 ARM 模板中限制/自定义资源组区域
- python - 如何获得微调的 TFBertModel 的隐藏状态?
- python - OSError:[WinError 123],它将符号添加到文件路径并引发此错误
- apache-flink - K8 HA 模式下的 Flink Fencing 错误
- discord.js - Discord bot 无法通过节点打开
- reactjs - 如何在我的表单中放置一个计数器并使用 reactjs、formik 和 axios 在数据库中添加数据