左倾堆(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);
        }
    }
}

 

转载于:https://www.cnblogs.com/bbvi/p/5151278.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值