1,什么是堆 堆是具有下列性质的完全二叉树: 每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆 (例如图 9-2 左图所示) ; 或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆(例如图 9-2 右图所示)。 2,为什么出现堆排序 前面介绍的(简单)选择排序,需要每次从未排序序列中选 ...
分类:
编程语言 时间:
2018-06-06 21:48:25
阅读次数:
241
1.利用一般递归即可求得 2.利用完全二叉树的特性递归(时间复杂度O(logn*logn)) ...
分类:
编程语言 时间:
2018-06-04 11:50:28
阅读次数:
255
P3365 改造二叉树 P3365 改造二叉树 P3365 改造二叉树 链接 分析: 求出中序遍历后,然后使其变成上升子序列。过程:每个点减去坐标,然后nlogn求出最长不下降子序列,n-ans即答案。 做题时一直认为二叉树就是完全二叉树,然后一直MLE。。。 代码: ...
分类:
其他好文 时间:
2018-06-03 21:20:07
阅读次数:
131
堆排序的核心是首先创建一个堆 分大根堆和小根堆 堆可以想象成一个完全二叉树 大根堆 每一个根节点的值都要大于它的任意的孩子 小根堆 每一个根节点的值都要小于它的任意的孩子 由于要经常交换节点,那么还要考虑交换后交换下来的节点和他孩子们大小的关系 我们可以把这个调整的过程封装成一个函数 代码如下 Ad ...
分类:
编程语言 时间:
2018-06-01 11:37:33
阅读次数:
188
(二叉)堆是一个数组,他可以被看成一个近似的完全二叉树。树上的每一个节点对应数组中的一个元素,除了最底层之外,该树是完全填满的,而且是从左向右填充。表示堆的数组A包括两个属性,A.length给出数组元素的个数,A.heap size表示有多少个堆元素存储在该数组中。也就是说,虽然A[1..A.le ...
分类:
编程语言 时间:
2018-05-26 23:48:59
阅读次数:
415
求用二叉树存储的森林中树的棵数,我们首先需要的是将二叉树转换为森林。 那么如何计算二叉树存储的森林中树的棵数? 有这么一个森林与二叉树转换规则: 从二叉树根开始一直往右子树走,一共路过几个节点,对应的森林就有几个根, 也就是说,对应的森林有几棵树 高度为h的满二叉树最右边一路有h个节点(就是 高度为 ...
分类:
其他好文 时间:
2018-05-23 13:05:55
阅读次数:
666
两种特殊的二叉树 斜树 左斜树: 右斜树: 满二叉树 完全二叉树 二叉树的存储结构 1. 二叉树的顺序存储 ^代表不存在的结点。 对于右斜树,顺序存储结构浪费存储空间 ...
分类:
其他好文 时间:
2018-05-23 00:07:20
阅读次数:
164
一、基本概念 每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。 性质: 1、非空二叉树的第n层上至多有2^(n-1)个元素。 2、深度为h的二叉树至多有2^h-1个结点。 满二叉树:所有终端都在同一层次,且非终端结点的度数为2。 在满二叉树中若其深度为h,则其所包含的结点数必为2^h-1。 ...
分类:
其他好文 时间:
2018-05-20 15:25:38
阅读次数:
308
一、堆排序概述 当你看到这里请去原作者那里点个赞, 原文链接 1.堆是一种数据结构 可以将堆看作一棵完全二叉树,这棵二叉树满足,任何一个非叶节点的值都不大于(或不小于)其左右孩子节点的值。 2. 堆的存储 一般用数组来表示堆,若根节点存在于序号0处,i结点的父结点下表就为(i-1)/2,i结点的左右 ...
分类:
编程语言 时间:
2018-05-18 18:01:43
阅读次数:
206
二分搜索树的特点 二分搜索树首先是一个二叉树,其次其必须满足的条件是:每个节点的键值必须大于其左子节点,每个节点的键值必须小于其右子节点,这样以左右孩子为根的子树仍为二分搜索树,需要注意的是,二分搜索树不一定是一颗完全二叉树。 深度优先遍历 深度优先遍历的基本思想:对每一个可能的分支路径深入到不能再 ...
分类:
其他好文 时间:
2018-05-16 00:44:27
阅读次数:
221