堆可以看成一个近似的完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2](小根堆) 或者 Key[i]>=Key[2i+1]&&key[i]>=key[2i+2](大根堆) 有了上面的定义,就有下面的计算: #define Pa(i) i> ...
分类:
其他好文 时间:
2017-06-01 19:40:21
阅读次数:
200
树属于非线性数据结构,它是一种层次结构:如果存在前驱节点,则是唯一的,如果存在后继节点,则可以是多个。即树的元素之间是一对多的关系。树是由n个节点构成的有限集合T,如果n = 0,则是空树,如果n不等于0,则一个非空树,有且只有一个根结点root,如果n>1,则除了根结点外,其余节点又可以划分为有限 ...
分类:
其他好文 时间:
2017-05-23 23:41:05
阅读次数:
247
一。概念 线段树是用于处理区间的复杂度为O(log n)一类数据结构。线段树是一棵完美二叉树(区别于完全二叉树)。树上的每个节点维护一个区间,且为父亲节点的区间二等分后的其中一个子区间。 二. 基于线段树的RMQ操作(根据维护的信息不同,线段树还可以实现其他功能) 三. 基于线段树的查询 例如查询区 ...
分类:
其他好文 时间:
2017-05-22 17:47:12
阅读次数:
172
二叉树遍历 C# 什么是二叉树 二叉树是每个节点最多有两个子树的树结构 (1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二 叉树。 (2)满二叉树——除了叶结点外每一个结点都有左 ...
容易证明: 一棵高为h的完全二叉树有2^h 到 2^(h+1)-1个结点。 这就意味着,完全二叉树的高是[logN] 特点: 任意位置i: 左儿子在位置2i上,右儿子在位置2i+1上,父亲在i/2上 一个堆数据结构将由一个Comparable数组和一个代表当前堆的大小的整数组成: 优先队列的接口: ...
分类:
其他好文 时间:
2017-05-19 23:57:14
阅读次数:
175
题目描述 输入一串完全二叉树,用遍历前序打出。 输入输出格式 输入格式: 第一行为二叉树的节点数n。 后面n行,每一个字母为节点,后两个字母分别为其左右儿子。 空节点用*表示 输出格式: 前序排列的完全二叉树 输入输出样例 输入样例#1: 6 abc bdi cj* d** i** j** 输出样例 ...
分类:
其他好文 时间:
2017-05-15 20:23:48
阅读次数:
206
堆排序利用的完全二叉树这种数据结构所设计的一种算法,不过也是选择排序的一种。 堆实质上是满足如下性质的完全二叉树:k[i]<=k[2*i]&&k[i]<=k[2*i+1]或者k[i]>=k[2*i]&&k[i]>=k[2*i+1], 树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在) ...
分类:
编程语言 时间:
2017-05-12 23:58:05
阅读次数:
410
春蚕到死丝方尽,蜡炬成灰泪始干 ——无题 这里介绍两个比较难的算法: 1、堆排序 2、分治并归排序 先说堆。 这里请大家先自行了解完全二叉树的数据结构。 堆是完全二叉树。大顶堆是在堆中,任意双亲值都大于(或等于)其孩子值,就称其为大顶堆。 堆排序的步骤: 1、把数组想象成一个堆。数组的index+1 ...
分类:
编程语言 时间:
2017-05-12 20:21:21
阅读次数:
229
第一、树的定义: 1.有且只有一个称为根的节点 2.有若干个互不相交的子树,这些子树本身也是一颗树 第二、专业术语: 树的深度:从根节点到最低层,节点的层数 ,称之为树的深度。 根节点是第一层 结点的层次:根节点为第一层,根节点的子节点为第2层,以此类推 叶子节点:没有子节点的节点 非终端节点:实际 ...
分类:
编程语言 时间:
2017-05-10 23:38:21
阅读次数:
173
堆是一种特殊的完全二叉树,其特点是所有父节点都比子节点要小,或者所有父节点都比字节点要大。前一种称为最小堆,后一种称为最大堆。 比如下面这两个: 那么这个特性有什么作用?既然题目是堆排序,那么肯定能用来排序。想要用堆排序首先要创建一个堆,如果对4 3 6 2 7 1 5这七个数字做从小到大排序,需要 ...
分类:
编程语言 时间:
2017-05-10 17:54:30
阅读次数:
257