堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

  • 堆中某个节点的值总是不大于或不小于其父节点的值;
  • 堆总是一棵完全二叉树。

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。他们的时间复杂度如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class BigPq(object):def __init__(self, arr: list):self.arr = arrself.mark = 1while self.mark == 1:self.build()def build(self):self.mark = 0  # 先置为零, 只要经过一次swap函数,就再次置为1index = len(self.arr) - 1for i in range(index):if i * 2 + 2 <= index:  # 如果左右两个子节点都存在,去比较他们的大小self.tri(i, i * 2 + 1, i * 2 + 2)elif i * 2 + 1 <= index:  # 如果只有左子节点存在,去比较他们的大小if self.arr[i] < self.arr[i * 2 + 1]:self.swap(i, i * 2 + 1)else:breakdef tri(self, head: int, left: int, right: int):if self.arr[head] < self.arr[left]:self.swap(head, left)if self.arr[head] < self.arr[right]:self.swap(head, right)def swap(self, index_1: int, index_2: int):self.mark = 1temp = self.arr[index_2]self.arr[index_2] = self.arr[index_1]self.arr[index_1] = tempdef show(self):print(self.arr)def pop(self) -> int:self.arr[0] = self.arr[-1]temp = self.arr.pop()self.mark = 1while self.mark == 1:self.build()return tempdef push(self, value: int):self.arr.append(value)self.mark = 1while self.mark == 1:self.build()

python实现二叉堆中的大顶堆(大根堆)相关推荐

  1. Python实现二叉搜索树的删除功能

    Python实现二叉搜索树的删除功能 二叉搜索树(二叉查找树,Binary Search Tree)又称为排序二叉树.有序二叉树. 二叉搜索树的实现可以参考:https://blog.csdn.net ...

  2. Python实现二叉搜索树

    Python实现二叉搜索树 二叉搜索树(二叉查找树,Binary Search Tree)是一种特殊的二叉树,又称为排序二叉树.有序二叉树. 二叉搜索树具有如下特性: 1. 如果二叉树的左子树不为空, ...

  3. 二叉树 寻找二叉搜索树第K大的节点

    给定一颗二叉搜索树,返回该二叉搜索树第K大的节点 思路:由于二叉搜索树的中序遍历序列是从小到大的序列,模拟这一过程每访问一个节点,count++直到第K个 注意点: 由于递归的进入与返回过程,递归调用 ...

  4. [Leetcode][第99题][JAVA][恢复二叉搜索树][中序遍历]

    [问题描述][困难] [解答思路] 1. 显示中序遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public void recoverTree(TreeNode r ...

  5. Python练习——二维数组中每行最大值和每行和

    Python练习--二维数组中每行最大值和每行和 求一个3*3二维数组中每行的最大值和每行的和. 输入格式: 在一行中输入9个小于100的整数,其间各以一个空格间隔 输出格式: 输出3行3列的二维数组 ...

  6. c语言标准模板小顶堆,堆排序(大顶堆、小顶堆)----C语言

    堆排序 之前的随笔写了栈(顺序栈.链式栈).队列(循环队列.链式队列).链表.二叉树,这次随笔来写堆 1.什么是堆? 堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被 ...

  7. java大顶堆类,构建大顶堆、堆排序实现(java)

    构建大顶堆.堆排序实现(java) 构建大顶堆.堆排序实现(java) 堆排序介绍: ①堆排序是利用堆的数据结构设计的一种排序算法,堆排序是一种选择排序,时间复杂度为O(nlogn),是不稳定排序: ...

  8. 优先队列与相关题目(Python、二叉堆)

    1. 优先队列知识 1.1 优先队列简介 优先队列:一种特殊的队列.在优先队列中,元素被赋予优先级,当访问队列元素时,具有最高优先级的元素最先删除. 优先队列与普通队列最大的不同点在于出队顺序 普通队 ...

  9. 小米面试:二叉搜索中第K小的元素

    给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数. 示例 1: 输入: root = ...

最新文章

  1. [HDOJ2819]Swap(二分图最大匹配, 匈牙利算法)
  2. 【s操作】手机移动数据网络问题初级解决方案,论手机运营商网络状况
  3. Thymeleaf语法变量
  4. mysql php7安装配置_centos7无网络下安装部署php7.1.33+mysql5.7.28+apache2.4.6-Go语言中文社区...
  5. Word打开时显示*模板*,删除模板
  6. 【Java】java JMX之ObjectName
  7. 大数据之-Hadoop3.x_Hadoop_HDFS_掉线时限参数设置---大数据之hadoop3.x工作笔记0079
  8. java线程抢占式执行,Java并发基础(一)-线程基础
  9. Python TCP 学习笔记
  10. 一个HTTP请求的完整过程
  11. linux程序性能分析工具stap,《面向应用开发者的系统指南》CPU篇之使用systemtap分析进程的行为...
  12. 知网如何快速引用参考文献
  13. phalcon mysql_Phalcon框架数据库读写分离的实现方法
  14. android 不如 ios,安卓永远不如iOS运行流畅的根本原因
  15. 如何利用Slack客户端漏洞窃取Slack用户下载的所有文件
  16. OneNav一为主题魔改教程(一):优化后台新增网站时调用API却没有赋好值的BUG,以减少复制编辑工作量--一梦
  17. D-Wave公开演示大规模相干量子退火
  18. Cadence PSpice 模型10:ABM库的控制源型模型介绍与使用方法图文演示
  19. 透过现象看本质,究竟为什么阿里巴巴爱招Java开发程序员?
  20. Python+超市进销存 毕业设计-附源码211549

热门文章

  1. 中兴通讯已在多个国家和地区商用了安全领域的解决方案
  2. http接口测试工具——RESTClient
  3. redhat6 + 11G DG部署
  4. 进制转换Visual Basic—进制转换规则
  5. ECShop后台管理菜单修改
  6. access手工注入笔记
  7. 优雅还不够,简洁才高效!——用NValidator一句话搞定客户端检测
  8. 未来计算在“云-端”
  9. java的注释规范_Java 注释规范
  10. 高德地图自定义点标记大小_Vue:如何在地图上添加自定义覆盖物(点)