Java实现堆,最大堆,最小堆,左高树,左低树
MyList.LinearList参见链接
MyTree.TreeNode参见链接
#Heap
package MyHeap;public interface Heap {abstract public int size();abstract public int maxSize();abstract public boolean empty();abstract public boolean full();abstract public Comparable top();abstract public Comparable pop();abstract public Heap push(Comparable object);abstract public void initialize(Comparable[] object);abstract public void output();
}
#MaxHeap
package MyHeap;import java.util.Random;import MyList.LinearList;public class MaxHeap implements Heap {public static void main(String[] args){MaxHeap heap=new MaxHeap();Random random=new Random();for(int i=0;i<100;i++){heap.push(random.nextInt(1000));}heap.output();System.out.println("Size:"+heap.size());for(int i=0;i<100;i++){System.out.print(heap.pop()+" ");System.out.print("\r\n");}System.out.print("\r\n");}private int MaxSize;private MyList.LinearList List;public MaxHeap(){MaxSize=-1;List=new LinearList();}public MaxHeap(int maxsize){MaxSize=maxsize;List=new LinearList();}@Overridepublic int size() {// TODO Auto-generated method stubreturn List.size();}@Overridepublic int maxSize() {// TODO Auto-generated method stubreturn MaxSize;}@Overridepublic boolean empty() {// TODO Auto-generated method stubreturn size()==0;}@Overridepublic boolean full() {// TODO Auto-generated method stubreturn size()==maxSize();}private int parent(int index){if(index>=size()||index<=0){return -1;}else{return (index-1)/2;}}private int leftChild(int index){int output=index*2+1;if(output>=size()||index<0){return -1;}else{return output;}}private int rightChild(int index){int output=index*2+2;if(output>=size()||index<0){return -1;}else{return output;}}@Overridepublic Comparable top() {// TODO Auto-generated method stubreturn (Comparable) List.at(0);}private void reformDown(int index){int leftchild=leftChild(index);int rightchild=rightChild(index);if(leftchild==-1&&rightchild==-1){return;}else if(leftchild==-1){if(((Comparable) List.at(rightchild)).compareTo((Comparable) List.at(index))==1){List.swap(index,rightchild);reformDown(rightchild);}else{return;}}else if(rightchild==-1){if(((Comparable) List.at(leftchild)).compareTo((Comparable) List.at(index))==1){List.swap(index,leftchild);reformDown(leftchild);}else{return;}}else if(((Comparable) List.at(leftchild)).compareTo((Comparable) List.at(rightchild))==1){List.swap(index, leftchild);reformDown(leftchild);}else{List.swap(index,rightchild);reformDown(rightchild);}}@Overridepublic Comparable pop() {// TODO Auto-generated method stubif(empty()){System.out.println("heap is empty");return null;}else{Comparable object=top();List.swap(0, size()-1);List.deleteByIndex(size()-1);reformDown(0);return object;}}private void reformUp(int index){int parent=parent(index);while(parent!=-1&&((Comparable) List.at(parent)).compareTo((Comparable) List.at(index))==-1){List.swap(parent, index);reformUp(parent);}}@Overridepublic Heap push(Comparable object) {// TODO Auto-generated method stubif(full()){System.out.println("heap is full");}else{List.insert(object);reformUp(size()-1);}return this;}@Overridepublic void initialize(Comparable[] object) {// TODO Auto-generated method stubList.setMaxLength(object.length);for(int i=0;i<object.length;i++){push(object[i]);}}@Overridepublic void output() {// TODO Auto-generated method stubList.output();}}
#MaxHblt
package MyHeap;import java.util.Random;import MyTree.TreeNode;public class MaxHblt implements Heap {public static void main(String[] args){MaxHblt hblt=new MaxHblt();Random random=new Random();for(int i=0;i<100;i++){hblt.push(random.nextInt(1000));}hblt.output();System.out.println("Size:"+hblt.size());System.out.println("Height:"+hblt.height());for(int i=0;i<100;i++){System.out.print(hblt.pop()+" ");System.out.print("\r\n");}System.out.print("\r\n");}private int MaxSize;private TreeNode Root;public MaxHblt(){MaxSize=-1;Root=new TreeNode();}public MaxHblt(int maxsize){MaxSize=maxsize;Root=new TreeNode();}@Overridepublic int size() {// TODO Auto-generated method stubreturn Root.size();}@Overridepublic int maxSize() {// TODO Auto-generated method stubreturn MaxSize;}@Overridepublic boolean empty() {// TODO Auto-generated method stubreturn size()==0;}@Overridepublic boolean full() {// TODO Auto-generated method stubreturn size()==maxSize();}public int height(){return Root.height();}@Overridepublic Comparable top() {// TODO Auto-generated method stubreturn Root.root();}private TreeNode combine(TreeNode hblt1,TreeNode hblt2){if(hblt1==null||hblt1.size()==0){return hblt2;}else if(hblt2==null||hblt2.size()==0){return hblt1;}else{TreeNode node;if((hblt1.root()).compareTo(hblt2.root())==1){node=new TreeNode(hblt1.root(),hblt1.leftChild(),combine(hblt1.rightChild(),hblt2));}else{node=new TreeNode(hblt2.root(),hblt2.leftChild(),combine(hblt2.rightChild(),hblt1));}if(node.leftChild()==null||node.leftChild().height()<node.rightChild().height()){node=new TreeNode(node.root(),node.rightChild(),node.leftChild());}return node;}}@Overridepublic Comparable pop() {// TODO Auto-generated method stubif(empty()){System.out.println("heap is empty");return null;}else{Comparable object=top();Root=combine(Root.leftChild(),Root.rightChild());return object;}}@Overridepublic Heap push(Comparable object) {// TODO Auto-generated method stubif(full()){System.out.println("heap is full");}else{TreeNode node=new TreeNode(object);Root=combine(Root,node);}return this;}@Overridepublic void initialize(Comparable[] object) {// TODO Auto-generated method stubfor(int i=0;i<object.length;i++){push(object[i]);}}@Overridepublic void output() {// TODO Auto-generated method stubRoot.preOrder();System.out.print("\r\n");}}
#MinHeap
package MyHeap;import java.util.Random;import MyList.LinearList;public class MinHeap implements Heap {public static void main(String[] args){MinHeap heap=new MinHeap();Random random=new Random();for(int i=0;i<100;i++){heap.push(random.nextInt(1000));}heap.output();System.out.println("Size:"+heap.size());for(int i=0;i<100;i++){System.out.print(heap.pop()+" ");System.out.print("\r\n");}System.out.print("\r\n");}private int MaxSize;private MyList.LinearList List;public MinHeap(){MaxSize=-1;List=new LinearList();}public MinHeap(int maxsize){MaxSize=maxsize;List=new LinearList();}@Overridepublic int size() {// TODO Auto-generated method stubreturn List.size();}@Overridepublic int maxSize() {// TODO Auto-generated method stubreturn MaxSize;}@Overridepublic boolean empty() {// TODO Auto-generated method stubreturn size()==0;}@Overridepublic boolean full() {// TODO Auto-generated method stubreturn size()==maxSize();}private int parent(int index){if(index>=size()||index<=0){return -1;}else{return (index-1)/2;}}private int leftChild(int index){int output=index*2+1;if(output>=size()||index<0){return -1;}else{return output;}}private int rightChild(int index){int output=index*2+2;if(output>=size()||index<0){return -1;}else{return output;}}@Overridepublic Comparable top() {// TODO Auto-generated method stubreturn (Comparable) List.at(0);}private void reformDown(int index){int leftchild=leftChild(index);int rightchild=rightChild(index);if(leftchild==-1&&rightchild==-1){return;}else if(leftchild==-1){if(((Comparable) List.at(rightchild)).compareTo((Comparable) List.at(index))==-1){List.swap(index,rightchild);reformDown(rightchild);}else{return;}}else if(rightchild==-1){if(((Comparable) List.at(leftchild)).compareTo((Comparable) List.at(index))==-1){List.swap(index,leftchild);reformDown(leftchild);}else{return;}}else if(((Comparable) List.at(leftchild)).compareTo((Comparable) List.at(rightchild))==-1){List.swap(index, leftchild);reformDown(leftchild);}else{List.swap(index,rightchild);reformDown(rightchild);}}@Overridepublic Comparable pop() {// TODO Auto-generated method stubif(empty()){System.out.println("heap is empty");return null;}else{Comparable object=top();List.swap(0, size()-1);List.deleteByIndex(size()-1);reformDown(0);return object;}}private void reformUp(int index){int parent=parent(index);while(parent!=-1&&((Comparable) List.at(parent)).compareTo((Comparable) List.at(index))==1){List.swap(parent, index);reformUp(parent);}}@Overridepublic Heap push(Comparable object) {// TODO Auto-generated method stubif(full()){System.out.println("heap is full");}else{List.insert(object);reformUp(size()-1);}return this;}@Overridepublic void initialize(Comparable[] object) {// TODO Auto-generated method stubList.setMaxLength(object.length);for(int i=0;i<object.length;i++){push(object[i]);}}@Overridepublic void output() {// TODO Auto-generated method stubList.output();}}
#MinHblt
package MyHeap;import java.util.Random;import MyTree.TreeNode;public class MinHblt implements Heap {public static void main(String[] args){MinHblt hblt=new MinHblt();Random random=new Random();for(int i=0;i<100;i++){hblt.push(random.nextInt(1000));}hblt.output();System.out.println("Size:"+hblt.size());System.out.println("Height:"+hblt.height());for(int i=0;i<100;i++){System.out.print(hblt.pop()+" ");System.out.print("\r\n");}System.out.print("\r\n");}private int MaxSize;private TreeNode Root;public MinHblt(){MaxSize=-1;Root=new TreeNode();}public MinHblt(int maxsize){MaxSize=maxsize;Root=new TreeNode();}@Overridepublic int size() {// TODO Auto-generated method stubreturn Root.size();}@Overridepublic int maxSize() {// TODO Auto-generated method stubreturn MaxSize;}@Overridepublic boolean empty() {// TODO Auto-generated method stubreturn size()==0;}@Overridepublic boolean full() {// TODO Auto-generated method stubreturn size()==maxSize();}public int height(){return Root.height();}@Overridepublic Comparable top() {// TODO Auto-generated method stubreturn Root.root();}private TreeNode combine(TreeNode hblt1,TreeNode hblt2){if(hblt1==null||hblt1.size()==0){return hblt2;}else if(hblt2==null||hblt2.size()==0){return hblt1;}else{TreeNode node;if((hblt1.root()).compareTo(hblt2.root())==-1){node=new TreeNode(hblt1.root(),hblt1.leftChild(),combine(hblt1.rightChild(),hblt2));}else{node=new TreeNode(hblt2.root(),hblt2.leftChild(),combine(hblt2.rightChild(),hblt1));}if(node.leftChild()==null||node.leftChild().height()<node.rightChild().height()){node=new TreeNode(node.root(),node.rightChild(),node.leftChild());}return node;}}@Overridepublic Comparable pop() {// TODO Auto-generated method stubif(empty()){System.out.println("heap is empty");return null;}else{Comparable object=top();Root=combine(Root.leftChild(),Root.rightChild());return object;}}@Overridepublic Heap push(Comparable object) {// TODO Auto-generated method stubif(full()){System.out.println("heap is full");}else{TreeNode node=new TreeNode(object);Root=combine(Root,node);}return this;}@Overridepublic void initialize(Comparable[] object) {// TODO Auto-generated method stubfor(int i=0;i<object.length;i++){push(object[i]);}}@Overridepublic void output() {// TODO Auto-generated method stubRoot.preOrder();System.out.print("\r\n");}}
Java实现堆,最大堆,最小堆,左高树,左低树相关推荐
- java 最小堆_堆排序 最大堆 最小堆 Java 实现
堆 一点疑惑,堆排序是就地排序,所以空间复杂度是 O(1).但是,比如我有一个数组,建立一个最小堆,然后每次取出最小堆的顶点.建立最小堆需要额外空间? 不深究了,归并排序需要额外空间. 堆是完全二叉树 ...
- C++实现最大堆最小堆
目录 堆和栈的区别 最大堆与最小堆 最大堆的操作 最大堆的插入操作 最大堆的弹出操作 最大堆的C++代码实现 最小堆概念 最小堆的插入操作 最小堆的弹出操作 最小堆的C++代码实现 最大堆最小堆的应用 ...
- Golang实现最大堆/最小堆
Golang实现最大堆/最小堆 参考: https://yangjiahao106.github.io/2019/01/15/golang-%E6%9C%80%E5%A4%A7%E5%A0%86%E5 ...
- 【二叉堆】实现最小堆和最大堆
最小堆和最大堆采用完全二叉树的形式来存储不同数字的序列,在topK问题中有广泛应用.其满足中间节点大于左子树和右子树上所有节点值的特点,为保证其存储.查找和删除的遍历,通常采用数组的形式进行构建. 本 ...
- 最大堆最小堆的实现(C语言)
---------------- 该篇文章经提醒有一些错误,暂时没有时间修改,请勿参考. 该篇文章经提醒有一些错误,暂时没有时间修改,请勿参考. ---------------- 堆是特殊的队列,从堆 ...
- 《徐徐道来话Java》:PriorityQueue和最小堆
在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...
- C++STL中的最大堆,最小堆
堆,优先队列,头文件和队列是同一个#include<queue> #include<iostream> #include<queue> using namespac ...
- C++ 最大堆最小堆与push_heap pop_heap
make_heap:根据不同参数生成大顶堆或者小顶堆,默认大顶堆. make_heap(_RAIter,_RAIter) 默认生成大顶堆 make_heap(_RAIter,_RAIter,_Comp ...
- 最大堆、最小堆Java实现,解决TOP K问题
一.基础知识 1.1 什么是最大(小)堆 最大堆,最小堆类似,以下以最小堆为例进行讲解. 最小堆是满足以下条件的数据结构: 它是一棵完全二叉树 所有父节点的值小于或等于两个子节点的值 1.2 什么是完 ...
- 堆 最小堆 最大堆 堆排序(小到大,大到小)
导航 1.了解什么是堆 2.如何创建最小堆,最大堆 3.新增值在堆中如何进行 4.完整的堆排序,升序和降序(两种方式) ---------------------------------------- ...
最新文章
- 使用Mock.js进行独立于后端的前端开发
- Qt中的图像处理与绘制
- only SOY MILK IS NOT ENOUGH FOR BREAKFAST
- 查看Linux进程CPU过高具体的线程堆栈(不中断程序)
- mysql+tushare搭建本地数据库
- Android Studio:解决DataBinding v4包问题
- Atitit 微服务之道 attilax著 1. 什么是微服务架构?	1 1.1. 、微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现	2 1.2. 微服务与康威定律	2 1
- Affymetrix基因芯片小总结
- 120个常用货源网站,赶紧收藏!
- 【第六课】Smart 3d常见问题集锦
- Semantic UI 之 按钮 button
- 移动硬盘弹出文件或目录损坏且无法读取解决办法
- vue一维码,二维码生成
- hdu1052 Tian Ji -- The Horse Racing
- 小游戏——满天小星星
- linux 串口操作
- Excel怎么统计合并单元格数据
- 【全】各种颜色对应的 Hex code 和对应的 RGB 值
- 全球首届VueConf演讲PPT和视频免费公开
- 上海国际快递物流展浅谈快递自动化分拣设备市场“起风了”!