#include<stdio.h> int tree[513],n;//定义全局变量,在遍历的时候可以使用 void PreOrder(int i)//递归 { if(i>n||tree[i]==0) return; printf(" %d",tree[i]); PreOrder(2*i); Pre ...
分类:
其他好文 时间:
2019-05-18 11:12:07
阅读次数:
191
"[ZJOI2010]排列计数" 求由$1 n$组成的数列$\{a_i\}$中,满足$a_i a_{i/2}(i\neq 1)$的数列方案数$mod\ p$,$1 ≤n ≤ 10^6, p≤ 10^9$。 解 显然此为完全二叉树压维模型,即父节点点权$a_i$的子节点点权为$a_{i/2},a_{i ...
分类:
其他好文 时间:
2019-05-14 14:59:49
阅读次数:
117
堆排序很重要,但是更重要的是堆这个结构 堆结构:实际上是一棵完全二叉树 一个数组可以根据父结点、左子结点、右子结点的关系,脑补出一棵完全二叉树 算法1:一个数组变为大顶堆 heapInsert() 数组:2、1、3、6、0、4 (1)只有2的时候 (2) 2、1【认为完全二叉树的范围是0~1的,超过... ...
分类:
编程语言 时间:
2019-05-07 22:56:46
阅读次数:
174
本章学习了树和森林。因为之前对汉罗塔问题和费波纳兹数列问题理解不够透彻,自己对于递归思路不够清晰,再加上树的基本操作依赖于递归,所以感觉自己这一章学起来比较困难。这一章难点比较多,第一是新鲜的术语比较多,比如度,非终端结点,完全二叉树等等;第二是树的种类本身就比较多,树与树之间的基本操作遇到的问题可 ...
分类:
其他好文 时间:
2019-05-05 01:17:20
阅读次数:
168
第五章——树(生命不息,种树不止) 无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树; 有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树; 二叉树:每个节点最多含有两个子树的树称为二叉树; 完全二叉树 满二叉树 霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优 ...
分类:
其他好文 时间:
2019-05-05 01:16:57
阅读次数:
137
最近公共祖先 PS: 如果一棵二叉树的结点要么是叶子结点,要么它有两个子结点,这样的树就是满二叉树。 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 等比数列通项公式、求和公式 then,看题 x的祖 ...
分类:
其他好文 时间:
2019-05-02 21:46:55
阅读次数:
129
题目 题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解析 思路1 这一题应用堆排序算法复杂度只有O(nlog k),堆是完全二叉树的一种,最大堆就是最上面的数是最大的该方法基于二叉树或者堆来实现,首先把数组前k个数字 ...
分类:
编程语言 时间:
2019-05-02 17:09:01
阅读次数:
169
""" 堆是一种完全二叉树,有最大堆和最小堆两种。 最大堆:对于每个非叶子结点V,V的值都比它的两个孩子结点大,称为最大堆特性(heap order property), 最大堆里面的根总是储存最大值,最小值储存在叶子结点。 最小堆:和最大堆相反,每个非叶子结点V,它的两个孩子的值都比V的值大。 "... ...
分类:
编程语言 时间:
2019-04-26 20:45:51
阅读次数:
166
1.堆是什么? (如图所示是一个小堆) 1)堆是一颗完全二叉树,它的最后一层不是满的,其他每一层都是满的,最后一层从左到右也没有空隙。 简单的说? 完全二叉树也就是没有缝隙的二叉树。 2)堆常常通过数组实现,因为 父子节点直接的关系直接可以通过数组的索引换算 parent(i) = i/2 left ...
分类:
其他好文 时间:
2019-04-25 17:24:56
阅读次数:
163
归并排序仍然是利用完全二叉树实现,它是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列。 基本过程:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并 ...
分类:
编程语言 时间:
2019-04-25 14:29:57
阅读次数:
438