堆
         堆排序和合并排序一样,是一种时间复杂度为O(nlgn)的算法,同时和插入排序一样,是一种就地排序算法(不需要额外的存储空间)。堆排序需要用到一种被称为最大堆的数据结构,与java或者lisp的gc不一样,这里的堆是一种数据结构,他可以被视为一种完全二叉树,即树里面除了最后一层其他层都是填满的。也正是因为这样,树里面每个节点的子女和双亲节点的序号都可以根据当前节点的序号直...
                            
                            
                                分类:
编程语言   时间:
2016-05-12 20:05:22   
                                阅读次数:
284
                             
                    
                        
                            
                            
                                对于一颗搜索二叉树,最简单的方法就是用中序遍历,看是不是一个递增数列,如果是则是一颗搜索二叉树,如果不是则不是搜索二叉树。在这里用一个lastVisit去记录上一次搜索到的节点。整个过程就是先找到最左下角的节点,更新这个lastVisit为这个节点的值,然后按照中序遍历依次更新即可。代码如下。 对于 ...
                            
                            
                                分类:
其他好文   时间:
2016-05-12 10:29:42   
                                阅读次数:
257
                             
                    
                        
                            
                            
                                1.已知完全二叉树的层次遍历,求其前、中、后序 测试样例: ) 对于例1: 前序遍历:ABDGIJKLCEFH 中序遍历:DIGJLKBAECHF 后序遍历:ILKJGDBEHFCA 对于例2: 前序遍历:eadcbjfghi 中序遍历:abcdjefhgi 后序遍历:bcjdahigfe //用顺 ...
                            
                            
                                分类:
其他好文   时间:
2016-05-10 09:49:54   
                                阅读次数:
249
                             
                    
                        
                            
                            
                                首先呢,先来了解一个何为堆?堆数据结构是一种数组对象,它可被视为一棵完全二叉树结构。堆结构的二叉树存储是:最大堆:每个父节点的都大于孩子节点最小堆:每个父节点的都小于孩子节点最大堆:a[]={19,17,18,14,16,13,15,12,10,11}最小堆:a[]={10,11,13,12,16,18,15,17,14,..
                            
                            
                                分类:
其他好文   时间:
2016-05-09 07:14:43   
                                阅读次数:
115
                             
                    
                        
                            
                            
                                堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。堆结构的二叉树存储是最大堆:每个父节点的都大于孩子节点。最小堆:每个父节点的都小于孩子节点。这是一个普通的堆,我们想把它变成最大堆,就必须了解最大堆的特点。然后我们对它进行调整,保证每个父节点的都大..
                            
                            
                                分类:
其他好文   时间:
2016-05-08 01:25:43   
                                阅读次数:
241
                             
                    
                        
                            
                            
                                当队列中某个对象优先级比其他对象更高时候,需要比其他对象先出队列而不管所在的位置时候,需要使用优先队列。 
有如下的实现方法 
- 插入在对尾,出队时候遍历整个队列 
- 插入时即进行排序,出队时候固定在队首或者对尾 
- 使用二叉查找树 
- 使用二叉堆 
  往往在最后的最重要
堆是完全二叉树,使用数组就可以很好的实现。(vector更好,不需要再扩容)template ...
                            
                            
                                分类:
编程语言   时间:
2016-05-07 11:17:51   
                                阅读次数:
156
                             
                    
                        
                            
                            
                                堆排序算法时间复杂度为 O(nlgn)
堆从结构上讲,应该是一棵完全二叉树。在堆排序中一个很重要的概念是,维持最大堆的特性。最大堆就是每个节点的值比它左右孩子节点都要大。
我们首先将非叶子节点 都维持最大堆的特性一次。就是说保证非叶子节点它的左右孩子都比它的值要小。build_max_heap函数实现
其中,一个很重要的函数是max_heapify,它的功能是控制单个节点,保证它的孩子节点小...
                            
                            
                                分类:
编程语言   时间:
2016-05-07 08:53:38   
                                阅读次数:
154
                             
                    
                        
                            
                            
                                STL学习——Priority_queue篇
概述priority_queue是一个拥有权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能。因为它是queue,故只允许底端加入元素,顶端取出元素。priorit_queue内元素并非依照被推入的次序排列,而是依照元素权值排列。权值最高者,排在最前面。
实现priority_queue利用max_heap和vector表现的完全二叉树...
                            
                            
                                分类:
其他好文   时间:
2016-05-07 08:20:59   
                                阅读次数:
132
                             
                    
                        
                            
                            
                                //用满二叉树存储,从n/2处开始递归向上调整(n/2后均为叶子节点,无需调整)使得根最大 //满二叉树顺序存储,左子2i,右子2i+1; #include<stdio.h>#include<stdlib.h>#include<time.h>#define ARRAY_SIZE 1000#defin ...
                            
                            
                                分类:
其他好文   时间:
2016-05-06 02:05:49   
                                阅读次数:
137
                             
                    
                        
                            
                            
                                有K个球从一完整二叉树(fully binary tree,FBT)的树根(root)一个一个往下掉。当这个球遇到非终端节点时,可能往左子树跑,也可能往右子树跑,如此直到这颗球到达终端节点(也就是树叶)为止。至于在非终端节点时球该往左或往右的决定乃是由2个值true,false来控制的。如果这非终端 ...
                            
                            
                                分类:
其他好文   时间:
2016-05-05 10:56:53   
                                阅读次数:
115