最大堆树状打印
来源:互联网 发布:七天天网络 编辑:程序博客网 时间:2024/05/26 12:54
记录一下最近对于最大堆树状打印的思考
假设一个最大堆的总元素数是
- 堆高:
- 当前元素
- 最后一行满元素数
- 每行的开头空格数为:
- 元素间间隔大小:
- 因为最后一行两元素间至少有两个tab,这样parent才能放在量元素之间,以此类推。
0: 1 # first 7 tabs interval - tabs1: 2 3 # first 3 tabs interval 8 tabs2: 4 5 6 7 # first 1 tabs interval 4 tabs3:8 9 10 11 12 13 14 15 # first 0 tabs interval 2 tabs
一个简单的实现如下:
struct heap_t { type_t *node; int heapSize;};bool isPower(int value, int base = 2) { int n = log2(value); return (pow(2, n) == value);}void heapPrint( heap_t *heap) { printf( "Function: %s on line: %d\n", __FUNCTION__, __LINE__); int heapSize = heap->heapSize; int heapHeight = log2(heapSize); int firstTabs; int intervalTabs; int currentHeight; int i, k; for (i = 1; i <= heapSize; i++) { currentHeight = log2(i); if ( isPower(i) ){ /* print first tabs */ std::cout << std::endl; firstTabs = pow(2, heapHeight - currentHeight) - 1; if(firstTabs) for (k = 0; k < firstTabs; k++) std::cout << "\t"; std::cout << heap->node[i - 1]; } else { /* print interval tabs */ intervalTabs = pow(2, heapHeight - currentHeight + 1); for (k = 0; k < intervalTabs; k++) std::cout << "\t"; std::cout << heap->node[i - 1]; } } std::cout << std::endl;}
阅读全文
0 0
- 最大堆树状打印
- 20131024: 树状数组入门; 树堆入门; 二叉树的树形打印
- 最大堆
- 最大堆
- 最大堆
- 最大堆
- 最大堆
- 最大堆
- 最大堆
- 最大堆
- 最大堆
- 最大堆/最小堆
- 最小堆。最大堆。
- 堆排序(最大堆)
- 最大堆/最小堆
- 最大堆/最小堆
- 最大堆/最小堆
- 最大堆、最小堆
- 《Effective Java》读书笔记(二)之对于所有对象都通用的方法
- 原生JS获取单选框或复选框的选中值的方法
- session作用域
- 【LeetCode】4. Median of Two Sorted Arrays
- C语言学习:非局部跳转setjmp.h中的几个重要函数
- 最大堆树状打印
- "我"与AI
- 由传感器传入、树莓派修改MySQL数据
- ElasticSearch集群服务器配置
- SSD6 Exercise 1: Decoding Lab
- keystore案例
- Elasticsearch分布式搜索集群配置
- 对于存在源码和Hibernate映射文件的项目,更换数据库
- HDU3785 寻找大富翁【优先队列】