的两个特点? 堆是一个完全二叉树; 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。 第一点,堆必须是一个完全二叉树。还记得我们之前讲的完全二叉树的定义吗?完全二叉树要求,除了最后一层,其他层的节点个数都是满的,最后一层的节点都靠左排列。第二点,堆中的每个节点的值必须大于等于(或 ...
分类:
编程语言 时间:
2019-12-18 21:43:29
阅读次数:
100
堆指的是每个节点的值大于等于或小于等于左右节点的值的完全二叉树结构,堆又分大顶堆(每个节点的值大于等于左右节点的值)和小顶堆(每个节点的值小于等于左右节点的值)。 使用堆进行排序的前提是要先构造一个堆出来,这里以大顶堆为例。 给定一个数组进行构造大顶堆。 构造大顶堆的主要思路: 1、n个数据; 2、 ...
分类:
编程语言 时间:
2019-12-17 13:24:57
阅读次数:
99
在我之前的文章中:《高效排序之——堆排序,归并排序、快速排序》中初步介绍了堆排序的过程,但是认真的说,自己并没有叙述的十分清楚,这篇博客,我将持续更新,表明堆排序的一个过程和核心思想。 系列博客将按照下面三个问题展开: 什么是堆? 为何堆结构可以用来排序? 怎么利用堆结构进行排序? 堆排序的算法性能 ...
分类:
编程语言 时间:
2019-12-15 16:35:47
阅读次数:
97
Sort 包介绍 Go 语言标准库 sort 包中实现了几种基本的排序算法:插入排序、快速排序和堆排序,但是在使用 sort 包进行排序时无需具体考虑使用哪种排序方式,因为该方法会根据传入的排序的数据量来进行自动选择合适的排序算法。 func insertionSort(data Interface ...
分类:
其他好文 时间:
2019-12-13 23:56:22
阅读次数:
140
1算法 排序 选择排序 冒泡排序 希尔排序2数据结构 数组 集合 队列 栈 先进后出 堆 (堆是一种经过排序的树形数据结构) 完全二叉树 平衡二叉树 红黑树 3设计模式 工厂模式 单例模式 代理模式 策略模式 (我理解的只有这几个) 迭代器模式 (工作中没有具体使用 只有粗略的使用到) 工厂模式:工 ...
分类:
其他好文 时间:
2019-12-13 23:23:48
阅读次数:
116
本题和leetcode116的区别是,116题是完全二叉树,本题是普通二叉树(不一定是完全二叉树)。 但当初做116题的时候,并没有使用完全二叉树这个条件,因此当初的解决方案,完全适用于本题。 ...
分类:
其他好文 时间:
2019-12-11 12:46:25
阅读次数:
80
1. 堆排序 算法核心思想 堆排序利用堆的特点, 最大堆要求节点的元素都要不小于其孩子,最小堆要求节点元素都不大于其左右孩子,那么处于最大堆的根节点的元素一定是这个堆中的最大值,每次把堆顶元素放置在二叉树的尾部,然后重新建堆这样循环处理,最终就能完成排序。 核心算法逻辑如下: 建堆 把堆顶的元素和最 ...
分类:
编程语言 时间:
2019-12-09 21:22:00
阅读次数:
86
1 维护最大堆性质的过程(MAX-HEAPIFY) 输入数组A和一个下标i。假设以LEFT(i)和RIGHT(i)为根节点二叉树都是最大堆,但是A[i]可能小于左右孩子节点。这时需要通过该过程使得A[i]在最大堆中“逐级下降”,从而使得以下标i为根节点二叉树为最大堆。 伪代码 : MAX-HEAPI ...
分类:
编程语言 时间:
2019-12-09 12:02:27
阅读次数:
104
数据结构 树(上) 一、概述 主要内容包含树的基本概念、二叉树(平衡二叉树、完全二叉树、满二叉树)、搜索树(二叉搜索树、平衡搜索树、AVL树、伸展树、(2,4)树、红黑树)、(a,b)树、B树等实际运用的树数据结构 二、基本知识(树的定义和属性) 1、树(非线性数据结构)运用于一些算法实现的效率会比 ...
分类:
其他好文 时间:
2019-12-08 11:01:30
阅读次数:
119
来源:https://leetcode-cn.com/problems/count-complete-tree-nodes/ 法一: 自己的代码 思路: 刚开始的方法多遍历了一行,改进后的,只需遍历到最后一行就停,这是由完全二叉树的性质决定的,注意层序遍历二叉树的时候,这里不能用栈来实现,必须用队列 ...
分类:
其他好文 时间:
2019-12-07 21:27:14
阅读次数:
90