常见数据结构的实现(二):二叉堆

2020-05-20 00:00:00 操作 节点 元素 位置 查找

上一篇我讲过了跳跃表的实现,那么这篇文章就是分析二叉堆的实现了。。

鸿胪少卿:常见数据结构的实现(一):跳跃表zhuanlan.zhihu.com

介绍

堆也是一种基本的数据结构,分为大根堆和小根堆,实现方式可以有数组和二叉树两种方法。数组实现的优点主要是支持随机访问,缺点就不用多说了。二叉树实现可以很好地适应动态数据变化的情况。堆支持的操作主要有三种:push操作、pop操作、peek操作。

下面的一张图是我自己绘制的二叉堆(小根堆):

heap.png

分析

按照上面的图,所有节点包含以下属性:存储的元素,指向左子节点的引用,指向右子节点的引用。为了方便,具体实现时每个节点还有一个指向父节点的引用。

那么我们可以如下构建节点类和二叉堆类:

//堆的完全二叉树实现
public class Heap {

    private int size;//堆的大小
    private TreeNode head;//堆顶节点
    private TreeNode tail;//堆尾节点
    private final boolean order;//true表示正序,false表示逆序

    //节点类
    private static class TreeNode{

        public Comparable comparable;
        private TreeNode left;//左子节点
        private TreeNode right;//右子节点
        private TreeNode parent;//父节点

        public TreeNode(Comparable comparable) {
            this.comparable = comparable;
            this.left = null;
            this.right = null;
            this.parent = null;
        }
    }

    public Heap(boolean order) {
        this.size = ;
        this.head = null;
        this.tail = null;
        this.order = order;
    }

}

相关文章