堆的定义 必须是一个完全二叉树(除了最后一层, 每个节点都有两个子节点, 最后一层只能缺少若干个右节点) 堆中每一个节点的值都必须` =(大顶堆)或 0: parent = int(i / 2) if self.heap_list[i] = 1: top_value = self.heap_list ...
分类:
编程语言 时间:
2019-06-23 18:59:58
阅读次数:
95
题意 计算完全二叉树节点数。 题解 不使用遍历方法,优化时间复杂度到O(H^2)。 高度为h的满二叉树节点数为2^h 1。 设计递归函数search(Node root,int h,int H),返回当前节点roo为根的完全二叉树的节点数。h代表该节点在的高度,高度从1计算,H代表原始二叉树的高度始 ...
分类:
其他好文 时间:
2019-06-22 01:31:38
阅读次数:
149
满二叉树:每一个结点要么左右结点都是空的,要么左右结点都是存在的。 完全二叉树:若一个树的高度为N,那么除了第N-1层外,每层都是满的,且最后一层的数据是从左往右排列的。 若一个二叉树只有一个根结点,那么根结点是第0层,深度为0,这棵二叉树的高度为1. 图1是满二叉树但不是完全二叉树,图二是完全二叉 ...
分类:
其他好文 时间:
2019-06-12 23:09:30
阅读次数:
103
什么是堆 堆是一种特殊的树,他满足一下两点要求 堆是一个完全二叉树 堆中每一个节点的值都必须大于等于(或小于等于)其子树中的值 最大堆 最大堆和最小堆是二查堆的两种形式,最大堆和最小堆很相似,所以本文只实现最大堆以及堆排序 最大堆:根节点的键值是所有结点键值中的最大者,且每个结点的值都比孩子结点大 ...
分类:
其他好文 时间:
2019-06-06 23:04:52
阅读次数:
217
这个故事告诉我们,万物皆可暴(du)力(liu)dp。首先,题目的大意就是让我们通过他给定的一些变换方式使得这棵树变为完全二叉树。我们把完全二叉树所有的叶子节点连起来,应该只有两种情况,一种是一条链,另一种是两条链,其中一条链上的点的深度比另一条链的深度大1。令dp(i,j)表示i节点状态为j时的最 ...
由于是CBT,这道题一定是要用到CBT的性质,来减少时间复杂度。 由于是树的题,很容易想到递归,将原问题划归到子树上。完全二叉树除了最后一层一定是满的,因此子树中一定有一棵是满二叉树,而满二叉树的节点个数是2^n-1,接着只要计算另一棵的节点数即可。 在完全二叉树中,计算树的高度只要一路向左查看即可 ...
分类:
其他好文 时间:
2019-06-03 14:12:08
阅读次数:
111
搬运自我的CSDN https://blog.csdn.net/u013213111/article/details/90343879 也就是一棵完全二叉树。堆顶最大则为大根堆,堆顶最小则为小根堆,这里实现的是小根堆。 1.定义 用一个数组来存储数据。 2.新建一个二叉堆 给二叉堆分配空间,给存储数 ...
分类:
其他好文 时间:
2019-06-01 21:38:23
阅读次数:
128
1、算法介绍 1.1、数据结构——堆 堆是一种近似完全二叉树的数据结构,其主要性质是:节点值大于等于(小于等于)其子节点的值。 大顶堆:节点值大于等于其子节点的值,用于升序排序。 小顶堆:节点值小于等于其子节点的值,用于降序排序。 1.2、堆的构建 1.3、算法步骤 (1)未排序序列构建堆 (2)堆 ...
分类:
编程语言 时间:
2019-05-29 14:20:29
阅读次数:
116
1.种类及概念: 二叉树是每个结点最多有两个子树的树结构。 完全二叉树:除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点。 满二叉树:每一层上的节点数都是最大节点数,深度为k,且有2^k-1个节点。 平衡二叉树:又被称为AVL树(区别于AVL算法),它是一棵二叉排 ...
分类:
其他好文 时间:
2019-05-25 09:58:26
阅读次数:
160
此文章同步发布在CSDN上:https://blog.csdn.net/weixin_44385565/article/details/90317830 1110 Complete Binary Tree (25 分) 此文章同步发布在CSDN上:https://blog.csdn.net/weix ...
分类:
其他好文 时间:
2019-05-18 18:54:44
阅读次数:
94