zoukankan      html  css  js  c++  java
  • 左倾堆(C#)

    参考:http://www.cnblogs.com/skywang12345/p/3638384.html

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    using System.Threading;
    using System.IO;
    using System.Collections;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication2
    {
        public class Program
        {
            public static void Main()
            {
    
                LeftListHeapTree<int> leftListTreeA = new LeftListHeapTree<int>();
                leftListTreeA.Insert(10);
                leftListTreeA.Insert(40);
                leftListTreeA.Insert(24);
                leftListTreeA.Insert(30);
                leftListTreeA.Insert(36);
                leftListTreeA.Insert(20);
                leftListTreeA.Insert(12);
                leftListTreeA.Insert(16);
    
    
                LeftListHeapTree<int> leftListTreeB = new LeftListHeapTree<int>();
                leftListTreeB.Insert(17);
                leftListTreeB.Insert(13);
                leftListTreeB.Insert(11);
                leftListTreeB.Insert(15);
                leftListTreeB.Insert(19);
                leftListTreeB.Insert(21);
                leftListTreeB.Insert(23);
    
    
                leftListTreeA.Merge(leftListTreeB);
    
                Console.Read();
            }
        }
    
        public class LeftListHeapNode<T> where T : IComparable
        {
            public T Key { get; set; }
            public int Npl { get; set; }
            public LeftListHeapNode<T> LeftNode { get; set; }
            public LeftListHeapNode<T> RightNode { get; set; }
    
            public LeftListHeapNode(T _key, LeftListHeapNode<T> _leftNode, LeftListHeapNode<T> _rightNode)
            {
                Key = _key;
                LeftNode = _leftNode;
                RightNode = _rightNode;
                Npl = 0;
            }
    
            public override string ToString()
            {
                return Key + "";
            }
        }
    
    
        public class LeftListHeapTree<T> where T : IComparable
        {
            public LeftListHeapNode<T> RootNode { get; set; }
    
    
            private LeftListHeapNode<T> Merge(LeftListHeapNode<T> leftTreeNode, LeftListHeapNode<T> rightTreeNode)
            {
                if (leftTreeNode == null)
                {
                    return rightTreeNode;
                }
    
                if (rightTreeNode == null)
                {
                    return leftTreeNode;
                }
    
                if (leftTreeNode.Key.CompareTo(rightTreeNode.Key) > 0)
                {
                    LeftListHeapNode<T> temp = leftTreeNode;
                    leftTreeNode = rightTreeNode;
                    rightTreeNode = temp;
                }
    
                leftTreeNode.RightNode = Merge(leftTreeNode.RightNode,rightTreeNode);
    
                if (leftTreeNode.LeftNode == null || leftTreeNode.LeftNode.Npl < leftTreeNode.RightNode.Npl)
                {
                    LeftListHeapNode<T> temp = leftTreeNode.LeftNode;
                    leftTreeNode.LeftNode = leftTreeNode.RightNode;
                    leftTreeNode.RightNode = temp;
                }
    
                if (leftTreeNode.RightNode == null || leftTreeNode.LeftNode == null)
                {
                    leftTreeNode.Npl = 0;
                }
                else {
                    leftTreeNode.Npl = (leftTreeNode.LeftNode.Npl > leftTreeNode.RightNode.Npl) ?
                        (leftTreeNode.RightNode.Npl + 1) : (leftTreeNode.LeftNode.Npl + 1);
                }
                return leftTreeNode;
            }
    
            public void Merge(LeftListHeapTree<T> other)
            {
                this.RootNode = Merge(this.RootNode,other.RootNode);
            }
    
            public void Insert(T key)
            {
                LeftListHeapNode<T> node = new LeftListHeapNode<T>(key,null,null);
                this.RootNode = Merge(this.RootNode,node);
            }
        }
    }
  • 相关阅读:
    下面这段java的源代码的意思
    Swing高级JInternalFrameTest内部窗体
    (转)为什么水平滚动条显示不了
    创建主窗体(转)
    javax.swing.JOptionPane.showMessageDialog() 方法
    Java图形界面设计
    java 做项目时遇到的一些问题
    selectmethod=cursor的含义及其使用
    java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433;
    10.24
  • 原文地址:https://www.cnblogs.com/bbvi/p/5151278.html
Copyright © 2011-2022 走看看