C++判断一个序列是否为堆(最大堆、最小堆)
2017-07-01 19:52
561 查看
1、如何判断一个序列是不是堆?
把这个序列看成是数组型的二叉树,如果根节点是i,左子数是2*i,右子数是2*i+1。
2、堆分为最大堆和最小堆。
(1)最大堆
以{100,60,70,50,32,65}为例分析:
最大堆中所有父节点都比左子树大,比右子数小,画成堆形式如下:
(2)最小堆
比如{32,50,60,70,100,65}为例分析:
最小堆中所有父节点都比左子树小,比右子数大,画成堆形式如下:
把这个序列看成是数组型的二叉树,如果根节点是i,左子数是2*i,右子数是2*i+1。
2、堆分为最大堆和最小堆。
(1)最大堆
以{100,60,70,50,32,65}为例分析:
最大堆中所有父节点都比左子树大,比右子数小,画成堆形式如下:
(2)最小堆
比如{32,50,60,70,100,65}为例分析:
最小堆中所有父节点都比左子树小,比右子数大,画成堆形式如下:
相关文章推荐
- 经典面试题:求数组的最大子序列和;实现函数 :判断一个自负喜欢是否是另一个字符串旋转所得;杨氏矩阵中查找一个数。
- 剑指offer-给出一个入栈序列和一个出栈序列,判断出栈序列是否合法。
- 22-判断一个序列是否是另一个序列入栈的弹出序列
- 【面试题】剑指offer24--判断一个序列是否为二叉树的后序遍历
- 一个判断long类型的数是否为回文数算法的C++代码
- 如何判断一个C++对象是否在堆上
- 剑指offer:二叉搜索树的后序遍历序列(判断一个数组是否是二叉搜索树的后续遍历序列)
- C++ 判断点是否在一个面内
- c++中怎么判断一个string类型的字符串变量是否为数字?
- 《C++第六周实验报告4-1》---设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
- 【codechef】判断一个数是否为某组勾股数的最大数?
- Java 判断一个序列是否是搜索二叉树的后序遍历结果
- 快速判断一个数是否是2的幂次方c++
- 判断给定序列是否是对应入栈序列的出栈序列(C++)
- 面试题精选(76):给定BST先序遍历序列,不构造BST的情况下判断BST是否每个node都只有一个child
- 判断某序列是否为另一个序列的出栈序列 C++实现
- 《剑指offer》:[24]判断一个序列是否为二叉树的后序遍历序列
- 在一个长度为n(n < 1000)的整数序列中,判断是否存在某两个元素之和为k。