news 2026/1/15 10:06:06

完全二叉树与堆

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
完全二叉树与堆

完全二叉树,仅允许最底层的节点不完全填满,且最底层的节点必须从左至右依次连续填充。

堆(heap)是一种满足特定条件的完全二叉树,主要可分为两种类型:
1,小顶堆(min heap):任意节点的值 小于其子节点的值。
2,大顶堆(max heap):任意节点的值 大于其子节点的值。

编程语言提供的是优先队列(priority queue),定义为具有优先级排序的队列。堆通常用于实现优先队列,大顶堆相当于元素按从大到小的顺序出队的优先队列。我们可以将“优先队列”和“堆”看作等价的数据结构。

/* 初始化堆 */// 初始化小顶堆Queue<Integer>minHeap=newPriorityQueue<>();// 初始化大顶堆(使用 lambda 表达式修改 Comparator 即可)Queue<Integer>maxHeap=newPriorityQueue<>((a,b)->b-a);/* 元素入堆 */maxHeap.offer(1);maxHeap.offer(3);maxHeap.offer(2);maxHeap.offer(5);maxHeap.offer(4);/* 获取堆顶元素 */intpeek=maxHeap.peek();// 5/* 堆顶元素出堆 */// 出堆元素会形成一个从大到小的序列peek=maxHeap.poll();// 5peek=maxHeap.poll();// 4peek=maxHeap.poll();// 3peek=maxHeap.poll();// 2peek=maxHeap.poll();// 1/* 获取堆大小 */intsize=maxHeap.size();/* 判断堆是否为空 */booleanisEmpty=maxHeap.isEmpty();/* 输入列表并建堆 */minHeap=newPriorityQueue<>(Arrays.asList(1,3,2,5,4));

堆通常作为实现优先队列的首选数据结构,其入队和出队操作的时间复杂度均为Ologn 。给定一组数据,我们用堆存储,然后不断地执行出堆操作,就可以得到有序数据。Top-k 是一个经典算法问题,可以使用堆数据结构高效解决 ,选择热度前 5 ,选取销量前 5 的商品等都是常见的应用。

/* 基于堆查找数组中最大的 k 个元素 */Queue<Integer>topKHeap(int[]nums,intk){// 初始化小顶堆Queue<Integer>heap=newPriorityQueue<Integer>();// 将数组的前 k 个元素入堆for(inti=0;i<k;i++){heap.offer(nums[i]);}// 从第 k+1 个元素开始,保持堆的长度为 kfor(inti=k;i<nums.length;i++){// 若当前元素大于堆顶元素,则将堆顶元素出堆、当前元素入堆if(nums[i]>heap.peek()){heap.poll();heap.offer(nums[i]);}}returnheap;}

总共执行了 n 轮入堆和出堆,堆的最大长度为k ,因此时间复杂度为nlogk 。该方法的效率很高,当
k较小时,时间复杂度趋向n ;当 k 较大时,时间复杂度不会超过 nlogn 。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/11 11:39:14

继电器:电力安全的隐形守护者

在夏季用电高峰&#xff0c;超负荷运行的电路如同埋下的 “定时炸弹”&#xff0c;漏电和短路引发的火灾事故频发。而继电器作为电力系统的 “安全阀门”&#xff0c;通过精准的电流监测与快速响应机制&#xff0c;成为防止漏电着火的核心防线。 实时监测漏电隐患传统断路器无法…

作者头像 李华
网站建设 2026/1/11 6:46:15

R.swift终极配置指南:构建强类型资源管理系统的完整实践

R.swift终极配置指南&#xff1a;构建强类型资源管理系统的完整实践 【免费下载链接】R.swift Strong typed, autocompleted resources like images, fonts and segues in Swift projects 项目地址: https://gitcode.com/gh_mirrors/rs/R.swift R.swift作为Swift项目中资…

作者头像 李华
网站建设 2026/1/12 16:13:41

联邦学习赋能YOLOv5:计算机视觉的隐私保护新范式

联邦学习赋能YOLOv5&#xff1a;计算机视觉的隐私保护新范式 【免费下载链接】yolov5 yolov5 - Ultralytics YOLOv8的前身&#xff0c;是一个用于目标检测、图像分割和图像分类任务的先进模型。 项目地址: https://gitcode.com/GitHub_Trending/yo/yolov5 在数据隐私日益…

作者头像 李华
网站建设 2026/1/11 22:35:12

从卡顿到丝滑:我的酷安桌面化使用体验

从卡顿到丝滑&#xff1a;我的酷安桌面化使用体验 【免费下载链接】Coolapk-Lite 一个基于 UWP 平台的第三方酷安客户端精简版 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-Lite 作为一个数码爱好者&#xff0c;我每天都会花大量时间在酷安社区上。但长期以来…

作者头像 李华
网站建设 2026/1/9 8:12:55

kmp算法

kmp算法运用于字符串匹配&#xff0c;具体实现过程如下&#xff1a;拿从母串中找是否存在某个字串举例1.求字串的next数组&#xff0c;什么是next数组&#xff0c;即每个字母所在位置对应的最长相等前后缀&#xff0c;例如abcabf的next数组就是000120&#xff0c;那如何找一个n…

作者头像 李华
网站建设 2026/1/11 13:49:37

AgentHub更新:LangGraph+千问实现Adaptive RAG系统

在大模型时代&#xff0c;如何让 AI 系统更准确、更高效地回答用户问题&#xff0c;是开发者和研究者共同关注的核心议题。传统的 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09; 技术虽然显著提升了模型的事实准确性&#xff0c;但在面对…

作者头像 李华