参考: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. html 时间单位

    <style>h1{font-size:16px;} .test{position:absolute;left:8px;width:200px;height:100px;margin:0 ...

  2. android view构造函数研究

           上周遇到了SurfaceView的constructor的问题,周末决定略微细致地研究一下这个令人发指的玩意.   SurfaceView是View的子类,与View一样有三个const ...

  3. SQL Server 分页语句

      表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用Not In和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable ...

  4. 转 Oracle 12c 使用scott等普通用户的方法

    一.前言 最近电脑上安装了oracle 12c数据库,想体验下新特性.安装完后,便像11g一样在dos窗口进行下面的操作: SQL*Plus: Release 12.1.0.2.0 Productio ...

  5. JdbcTemplate学习笔记

    JdbcTemplate学习笔记 1.使用JdbcTemplate的execute()方法执行SQL语句 Java 代码 jdbcTemplate.execute("CREATE TABLE ...

  6. Dynamic Performance Tables not accessible Automatic Statistics disabled for this session

    使用oracle时候统计会出现这个提示 Dynamic Performance Tables not accessible Automatic Statistics disabled for this ...

  7. angular.js简介

    angularJS是一个javaScript框架.可通过<script>标签添加到HTML页面 angular通过指令扩展了HTML,且通过表达式绑定数据到html 当网页加载完毕,Ang ...

  8. J2SE网络编程之 TCP与UDP

    1.什么是TCP TCP(Transmission Control Protocol传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,位于传输层.这三个特点中,面向连接就如同打电话,双方的 ...

  9. 第13章 Swing程序设计----常用事件监听器

    组件本身并不带有任何功能.这时需要为这些组件添加特定事件监听器. Swing中常用的两个事件监听器,即动作事件监听器和焦点事件监听器.

  10. MoQ(基于.net3.5,c#3.0的mock框架)简单介绍

    我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们的单元测试的速度会很慢,所以我们往往希望将持久化部分隔离开,做单元测试的 ...