原视频发现一个数据结构讲挺好的数据结构与算法教程
二叉树
- 如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。
文章图片
- 如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。
文章图片
- 任意节点的父节点的索引为(n-1)/2; 任意节点左孩子为2n + 1;右节点为2n + 2; (这个不用记啊,这个回头画个图,把索引标上,现找规律就行,记住这玩意儿有规律就行)
把上图二叉树节点当成数组索引,其实数组就是一个完全二叉树,比如:
文章图片
而这个完全二叉树就是堆
- 大根堆:任意节点大于所有其子节点的堆 为大根堆;反之为小根堆
- 构建大根堆(heapInsert):一个个把值放到堆末尾,比较他和他父亲,谁大谁在上面,重复此过程
- 顶部值是任意值,下面为堆进行重排(heapify):向下根自己两个节点的最大值比较小就换下去,重复此过程
- 堆中间值被修改: 如果改小了往下进行heapify 改大了网上进行heapInsert
思路: 先将数组转成大根堆(heapInsert)每次把大根堆的顶点pop出去,把堆的最小点移到头上,进行heapify
源代码
引申阅读
【算法学习笔记【day3】】数据结构:堆(Heap)
推荐阅读
- python|Yolov4详解
- 力扣|力扣打卡之最小栈
- 神经网络|神经网络方法研究及应用,神经网络算法简单例子
- 从0到1|牛客网刷题——JAVA
- JAVA|七千字带你了解异常处理
- scau|18937 阿克曼(Ackmann)函数
- 算法|2022年电设省赛碎碎念【省一!!】
- 机器学习|机器学习-DBSCAN聚类算法
- 数据聚类|聚类——密度聚类(DBSCAN、OPTICS、DENCLUE)