参考: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. UICollectController

    九宫格 UICollectController 1.新建一个xib描述cell 2.注册xib 3.collectionView显示cell *必须设置数据源(和代理并遵守协议) *实现数据源和代理的 ...

  2. DataGirdView 编辑项时的验证

    dgvConfig.DataSource = CreateTable(); dgvConfig.Columns["编号"].ReadOnly = true; //只读 dgvCon ...

  3. beagleboneblack HDMI不能显示

    beagleboneblack  接上HDMI到电视上,没有显示画面 看了资料之后才知道 http://elinux.org/Beagleboard:BeagleBoneBlack_HDMI#Conn ...

  4. MySql 加锁问题

    1.设置非自动提交 set autocommit=0;  这时候 for update才会起作用 2.一般用法 set autocommit=0;  for update(加锁)  ;  commit ...

  5. MFC DLL中导出函数模板

    //my.h struct AFX_EXT_CLASS B { }; struct AFX_EXT_CLASS C { }; class AFX_EXT_CLASS A { public: templ ...

  6. Core Data & MagicalRecord

    iOS 本地数据持久化存储: 1.plist 2.归档 3.NSUserDefaults 4.NSFileManager 5.数据库 一.CoreData概述 CoreData是苹果自带的管理数据库的 ...

  7. 在Activity之间使用Intent传值和Bundle传值的区别和方式

    两者本质上没有任何区别.Bundle只是一个信息的载体 将内部的内容以键值对组织 Intent负责Activity之间的交互 自己是带有一个Bundle的Intent.putExtras(Bundle ...

  8. [转]Android之Context和Activity互相转换

    1.context转换为activity Activity activity = (Activity) context; 2.从activity得到context 在activity的方法中用cont ...

  9. 转:loadruner报错:Step download timeout(120 seconds)的一个解决方法

    一个网友问了我一个问题如下:loadruner报错:Error -27728: Step download timeout (120 seconds) 如何解决语法检查通过,但是在并发执行一个查询时候 ...

  10. leetcode371

    我这道题目真的是划水的,因为弄了很长时间发现,我可能对于位操作不是特别喜欢吧. 确实为了最求速度,位操作确实快一些. 单独从题目意思来说,用别的方式实现加法,我觉得吧,真的有点醉了...就这样. 下面 ...