zoukankan      html  css  js  c++  java
  • 左式堆实现

    左式堆是为了方便合并操作实现的。

    左式堆性质:

    任意节点X的零路径长是X到任意没有两个儿子的节点的最短路径。任意一个节点的零路径长比他儿子的零路径长的最大值大1,null的零路径长是-1;对于x来说,他的左儿子的零路径长要大于等于右儿子。

    通过递归实现代码如下

    public class LeftistHeap<T extends Comparable<? super T>>{
        private Node<T> root;
        
        public LeftistHeap(){
            this.root=null;
        }
        public void merge(LeftistHeap<T> rhs){
            if(this.root==rhs.root){
                return;
            }
            merge(this.root, rhs.root);
            rhs.root=null;
        }
        private Node<T> merge(Node<T> t1,Node<T> t2){
            if(t1==null){
                return t2;
            }
            if(t2==null){
                return t1;
            }
            if(t1.val.compareTo(t2.val)<0){
                return merge1(t1, t2);
            }
            else{
               return     merge1(t2, t1);
            }
            
        }
        private Node<T> merge1(Node<T> t1,Node<T> t2){
            if(t1.left==null){
                t1.left=t2;
            }else{
                t1.right=merge(t1.right, t2);
                if(t1.left.npl<t1.right.npl){
                    swapChildren(t1);
                }
                t1.npl=t1.right.npl+1;
            }
            return t1;
        }
        public void insert(T val){
            merge(new Node(val),root);
        }
        public T findMin(){
            return root.val;
        }
        public T deleteMin(){
        
            T val=root.val;
             root=merge(root.left,root.right);
            return val;
        }
        public boolean isEmpty(){
            return root==null;
        }
        public void makeEmpty(){
             root=null;
        }
       private void swapChildren(Node<T> t){
            Node<T> left=t.left;
            Node<T> right=t.right;
            t.left=right;
            t.right=left;
        }
    }
  • 相关阅读:
    剑指Offer 28 对称的二叉树
    剑指Offer 54 二叉搜索树的第k大节点
    剑指Offer 41 数据流中的中位数
    剑指Offer 59 队列的最大值
    剑指Offer 12 矩阵中的路径
    剑指Offer 13 机器人的运动范围
    剑指Offer 42 连续子数组的最大和
    一句话总结随机森林
    一句话总结卷积神经网络
    一句话总结K均值算法
  • 原文地址:https://www.cnblogs.com/wxw7blog/p/7624193.html
Copyright © 2011-2022 走看看