参考: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();
leftListTreeA.Insert();
leftListTreeA.Insert();
leftListTreeA.Insert();
leftListTreeA.Insert();
leftListTreeA.Insert();
leftListTreeA.Insert();
leftListTreeA.Insert(); LeftListHeapTree<int> leftListTreeB = new LeftListHeapTree<int>();
leftListTreeB.Insert();
leftListTreeB.Insert();
leftListTreeB.Insert();
leftListTreeB.Insert();
leftListTreeB.Insert();
leftListTreeB.Insert();
leftListTreeB.Insert(); 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 = ;
} 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) > )
{
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 = ;
}
else {
leftTreeNode.Npl = (leftTreeNode.LeftNode.Npl > leftTreeNode.RightNode.Npl) ?
(leftTreeNode.RightNode.Npl + ) : (leftTreeNode.LeftNode.Npl + );
}
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);
}
}
}

左倾堆(C#)的更多相关文章

  1. 纸上谈兵:左倾堆(leftist heap)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们之前讲解了堆(heap)的概念.堆是一个优先队列.每次从堆中取出的元素都是堆中 ...

  2. 左倾堆(一)之 图文解析 和 C语言的实现

    概要 本章介绍左倾堆,它和二叉堆一样,都是堆结构中的一员.和以往一样,本文会先对左倾堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理 ...

  3. 左倾堆(二)之 C++的实现

    概要 上一章介绍了左倾堆的基本概念,并通过C语言实现了左倾堆.本章是左倾堆的C++实现. 目录1. 左倾堆的介绍2. 左倾堆的图文解析3. 左倾堆的C++实现(完整源码)4. 左倾堆的C++测试程序 ...

  4. 左倾堆(三)之 Java的实现

    概要 前面分别通过C和C++实现了左倾堆,本章给出左倾堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 左倾堆的介绍2. 左倾堆的图文解析3. 左倾堆的Java实现(完整 ...

  5. 左倾堆C++实现

    #include <iostream> #include <vector> #include <queue> using namespace std; templa ...

  6. 二叉堆(一)之 图文解析 和 C语言的实现

    概要 本章介绍二叉堆,二叉堆就是通常我们所说的数据结构中"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本 ...

  7. 斜堆(一)之 C语言的实现

    概要 本章介绍斜堆.和以往一样,本文会先对斜堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可.若文 ...

  8. 斜堆(二)之 C++的实现

    概要 上一章介绍了斜堆的基本概念,并通过C语言实现了斜堆.本章是斜堆的C++实现. 目录1. 斜堆的介绍2. 斜堆的基本操作3. 斜堆的C++实现(完整源码)4. 斜堆的C++测试程序 转载请注明出处 ...

  9. 斜堆(三)之 Java的实现

    概要 前面分别通过C和C++实现了斜堆,本章给出斜堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 斜堆的介绍2. 斜堆的基本操作3. 斜堆的Java实现(完整源码)4. ...

随机推荐

  1. OC画笔CGContextRef

    1.画线 CGContextRef context = UIGraphicsGetCurrentContext();//context相当于画布 CGContextSetStrokeColorWith ...

  2. PHP文件相关函数试题

    一.问答题 1.返回路径中的文件名部分的函数是什么? 2.改变文件模式的函数是什么? 3.拷贝文件的函数是什么? 4.返回路径中的目录部分的函数是什么? 5.将上传的文件移动到指定位置的函数是? 6. ...

  3. flex日期合并与拆分

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  4. hibernate ——联合主键

    接上一篇博客:http://www.cnblogs.com/tengpan-cn/p/5551323.html 主键类不需要写任何注解,表对象类使用@IdClass注解 在表对象类前面加@IdClas ...

  5. C# 垃圾回收机制(转)

    摘要:今天我们漫谈C#中的垃圾回收机制,本文将从垃圾回收机制的原理讲起,希望对大家有所帮助. GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由 ...

  6. Food on the Plane

    Food on the Plane time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  7. OpenGL------版本历史

    到今天为止,正式的OpenGL已经有九个版本.(1.0, 1.1, 1.2, 1.2.1, 1.3, 1.4, 1.5, 2.0, 2.1)每个OpenGL版本的推出,都增加了一些当时流行的或者迫切需 ...

  8. CentOS 下配置CUPS

    一.共享打印机的设置 1.在http://www.openprinting.org/printer/HP/HP-LaserJet_1010检查打印机的支持情况,两个企鹅以上表示Mostly,支持大部分 ...

  9. 2014 Shanghai Invitation Contest

    题目链接 http://acm.hdu.edu.cn/search.php?field=problem&key=2014%C9%CF%BA%A3%C8%AB%B9%FA%D1%FB%C7%EB ...

  10. 深入解析FileInputStream和FileOutputStream

    http://swiftlet.net/archives/1363 FileInputStream和FileOutputStream类属于字节类,可以操作任意类型的文件.在数据流的处理过程中,有两种情 ...