参考: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. 使用 Eclipse Memory Analyzer 进行简单内存泄漏分析

    Java 内存泄露的根本原因: 保存了不可能再被访问的变量类型的引用.因此我们的目的就是要找出这样的引用. 1.测试代码: public class MainActivity extends Acti ...

  2. 编译安装SVN不结合apache

    前言:独立SVN服务器不结合APACHE安装使用,连接独立SVN服务器也不是用HTTP协议.这是比较快捷的SVN服务器配置方法. 一.下载工具 1.subversion-1.6.17.tar.gz 2 ...

  3. PCI-E调试方式

    PCI-E的调试步骤 1.板子插上去之后正常情况下使用lspci 就能看的一个设备 这个设备上存在几个ID,可以根据ID可以确定设备是否识识别到 2.然后就是加载设备的驱动的时候,设备驱动会有VEND ...

  4. SQL SERVER中强制类型转换cast和convert的区别

    在SQL SERVER中,cast和convert函数都可用于类型转换,其功能是相同的, 只是语法不同. cast一般更容易使用,convert的优点是可以格式化日期和数值. 代码 select CO ...

  5. CodeForces 566B Replicating Processes

    #include <bits/stdc++.h> #define N 3010 #define LL long long #define unsigned U using namespac ...

  6. php 大转盘抽奖

    包在文件中 lottery.zip <!DOCTYPE HTML><html><head><meta charset="utf-8"> ...

  7. shell 分词

    ######################################################################### # File Name: hello.sh # Au ...

  8. java 内存分配全面解析

    JVM是什么? 首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上;可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了 Java的平台无 ...

  9. Linux学习 -- Shell基础 -- 概述

    Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串  双引号 ...

  10. CodeForces 500 A. New Year Transportation

    Description New Year is coming in Line World! In this world, there are n cells numbered by integers ...