国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

一棵C#寫的樹(1)    he_x(原作)

一棵C#寫的樹(1) he_x(原作)

更新時間:2022-05-05 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

C#的確是一個很好的面向?qū)ο笳Z言,我看《數(shù)據(jù)結(jié)構(gòu)(第二版)》那本書應(yīng)該出本用C#描述的版本。下面是我用C#寫的一棵樹。先用接口把節(jié)點做了抽象定義,這樣在實現(xiàn)遍歷,插入等操作的時候只對接口進(jìn)行操作。在程序中,我盡量使用C#的特性,如接口,屬性,玫舉,這樣代碼雖然看起來比較冗長,但是,當(dāng)代碼越來越長的時候,你就會從中看到優(yōu)點,因為合理的結(jié)構(gòu)讓你永遠(yuǎn)思路清晰。這課樹我只能算寫了一個開頭,因為如果要把所有類型的樹和加在他們之上的算法都寫出來,我看沒有1~2k 行程序是絕對不行的,不過,只要有時間,我一定會繼續(xù)寫的,同時希望大家也寫,把這個代碼庫完善起來。
using System;
using System.Collections;
///
/// author 何瀟(sailer)( he_x@263.net )
///
namespace Tree
{
/// <summary>
/// LEFT左子樹,RIGHT右子樹
/// </summary>
enum Position{LEFT,RIGHT};
/// <summary>
/// LINK指向孩子,THREAD指向后繼
/// </summary>
enum Tag{LINK,THREAD};
/// <summary>
/// 二叉樹節(jié)點的抽象定義
/// </summary>
interface IBinNode
{
bool isLeaf();
object Element{get;set;}
IBinNode Left{get;set;}
IBinNode Right{get;set;}
}

/// <summary>
/// 遍歷,線索化等操作的接口
/// </summary>
interface ITravelBinTree
{
void PreOrderTravel();
void InOrderTravel();
void RevOrderTravel();
void Print(IBinNode t);
}
interface IInsertBinTree
{
void Insert(IBinNode node,Position pos);
}
/// <summary>
/// Normal actualize of bintree
/// </summary>
class BinNodePtr : IBinNode
{
protected object element;
protected IBinNode lchild;
protected IBinNode rchild;
public BinNodePtr(object e,IBinNode left,IBinNode right)
{
 element = e;
 lchild = left;
 rchild = right;
}
public BinNodePtr(object e)
{
 element = e;
 lchild = rchild = null;
}
public BinNodePtr()
{
 element = null;
 lchild = rchild =null;
}
public bool isLeaf()
{
 if(lchild==null && rchild==null)
return true;
 return false;
}
public object Element
{
 get{return element;}
 set{element = value;}
}
public IBinNode Left
{
 get
 {
return lchild;
 }
 set
 {
lchild = value;
 }
}
public IBinNode Right
{
 get
 {
return rchild;
 }
 set
 {
rchild = value;
 }
}
}
class BinNodeLine : BinNodePtr,IBinNode
{
private Tag ltag,rtag;
public BinNodeLine(object e,IBinNode left,IBinNode right) :base(e,left,right)
{ltag = rtag = Tag.LINK;}
public BinNodeLine(object e) : base(e)
{ltag = rtag = Tag.LINK;}
public Tag LTag
{
 get{return ltag;}
 set{ltag = value;}
}
public Tag RTag
{
 get{return rtag;}
 set{rtag = value;}
}
}
class TravelBinTree : ITravelBinTree,IInsertBinTree
{
const int INIT_TREE_SIZE=20;
private IBinNode tree;
private BinNodeLine head; //線索化后的頭指針
private IBinNode prenode; //指向最近訪問過的前驅(qū)節(jié)點
public TravelBinTree()
{
 tree = new BinNodePtr();
}
public TravelBinTree(IBinNode INode)
{
 tree = INode;
}
/// <summary>
/// 先序遍歷樹,用非遞歸算法實現(xiàn)
/// </summary>
/// <remarks>非遞歸實現(xiàn)</remarks>
public void PreOrderTravel()
{
 IBinNode temptree;
 Stack stk = new Stack(INIT_TREE_SIZE);
 if(tree == null)
throw(new InvalidOperationException("訪問的樹為空"));
 temptree = tree;
 stk.Push(tree);
 while(stk.Count!=0)
 {
while(temptree!=null)
{
 Print(temptree);
 stk.Push(temptree.Left);
 temptree = temptree.Left;
}
stk.Pop(); // 空指針退棧
if(stk.Count != 0)
{
 temptree=(IBinNode)stk.Pop();
 stk.Push(temptree.Right);
 temptree = temptree.Right;
}
 }
}
public void InOrderTravel()
{
 InOrderTravel(tree);
}
private void InOrderTravel(IBinNode t)
{
 if(t==null) return;
 InOrderTravel(t.Left);
 Print(t);
 InOrderTravel(t.Right);
}
public void RevOrderTravel()
{
 RevOrderTravel(tree);
}
private void RevOrderTravel(IBinNode t)
{
 if(t==null) return;
 RevOrderTravel(t.Left);
 RevOrderTravel(t.Right);
 Print(t);
}
public void Print(IBinNode t)
{
 Console.Write(t.Element + ",");
}
public void Insert(IBinNode node,Position pos)
{
 if(node == null)
throw(new InvalidOperationException("不能將空節(jié)點插入樹"));
 switch(pos)
 {
case Position.LEFT : tree.Left = node;break;
case Position.RIGHT: tree.Right = node;break;
 }
}
/// <summary>
/// 按照先序遍歷順序遍歷樹
/// </summary>
public void TreeBuilder()
{
 Stack stk = new Stack(INIT_TREE_SIZE);
 stk.Push(tree);
 Position pos;
 string para;
 pos = Position.LEFT;
 IBinNode baby,temp;
 while(true)
 {
para = Console.ReadLine();
if(para == "")
{
 if(pos == Position.RIGHT)
 {
stk.Pop();
while(stk.Count!=0 && ((IBinNode)stk.Peek()).Right!=null)
 stk.Pop();
if(stk.Count ==0) break;
 }
 else
pos = Position.RIGHT;
}
else
{
 if(tree.GetType().Equals()==true)
baby = new BinNodePtr(para);
 temp = (IBinNode)stk.Peek();
 if(pos == Position.LEFT)
temp.Left = baby;
 else
temp.Right = baby;
 pos = Position.LEFT;
 stk.Push(baby);
}
 }

}
/// <summary>
/// 中序線索化
/// </summary>
public void InOrderThreading()
{
 head = new BinNodeLine("");
 head.RTag = Tag.THREAD;
 head.Right = head;
 if(tree == null) head.Left = head;
 else
 {
head.Left = tree; prenode = head;

 }
}
/// <summary>
/// 中序線索化的遞歸實現(xiàn)
/// </summary>
/// <param name="t"></param>
private void InThreading(IBinNode t)
{
 if(t==null)
return;
 else
 {
InThreading(t.Left);
 // if(left
 }
}
}
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// 測試控制臺
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
 string para = null;
 para = Console.ReadLine();
 BinNodePtr root = new BinNodePtr(para);
 TravelBinTree t = new TravelBinTree(root);
 t.TreeBuilder();
 t.PreOrderTravel();
 Console.WriteLine("");
 t.InOrderTravel();
 Console.WriteLine("");
 t.RevOrderTravel();
}
}
}

非常希望和大家交流( he_x@263.net )

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        91久久精品一区二区三区| 国产一区二区不卡老阿姨| 日韩在线一二三区| 911精品产国品一二三产区| 香蕉成人啪国产精品视频综合网 | 午夜不卡在线视频| 欧美日韩一区二区三区四区 | 免费欧美在线视频| 国产午夜亚洲精品午夜鲁丝片| 东方aⅴ免费观看久久av| 亚洲精品乱码久久久久久| 欧美色综合久久| 国产又黄又大久久| 亚洲日本va午夜在线影院| 在线91免费看| 国产成人在线视频网址| 亚洲一区二区三区小说| 精品国产第一区二区三区观看体验| 国产精品18久久久久久vr| 亚洲影院免费观看| 久久久精品国产免大香伊| 日本久久一区二区三区| 美腿丝袜在线亚洲一区| 亚洲色图制服诱惑 | 久久蜜臀中文字幕| 日本乱人伦aⅴ精品| 国产一区二区三区av电影 | 中文一区二区完整视频在线观看| 色综合亚洲欧洲| 看电影不卡的网站| 成人免费一区二区三区视频| 欧美日本精品一区二区三区| 不卡视频免费播放| 日本亚洲一区二区| 一区二区三区四区不卡视频| 久久综合九色综合欧美就去吻| 在线观看中文字幕不卡| 高清久久久久久| 麻豆精品一区二区三区| 亚洲老司机在线| 国产精品视频线看| 精品国产91乱码一区二区三区| 欧美日韩一级视频| 91论坛在线播放| 成人精品小蝌蚪| 国产ts人妖一区二区| 蜜臀av国产精品久久久久| 一区二区三区四区不卡视频| 中文字幕av一区 二区| 国产丝袜欧美中文另类| 2024国产精品| 久久综合av免费| 久久众筹精品私拍模特| 欧美精品一区二| 精品va天堂亚洲国产| 日韩欧美中文字幕制服| 欧美精品亚洲二区| 在线成人午夜影院| 日韩一区二区在线观看视频| 欧美久久久久久蜜桃| 欧美疯狂性受xxxxx喷水图片| 精品视频一区三区九区| 欧美三级视频在线播放| 欧美日韩成人综合| 欧美一级精品大片| 欧美精品一区二区精品网| 欧美精品一区二区三区高清aⅴ| 精品国产乱码久久久久久免费| 日韩欧美一级精品久久| 欧美成人精精品一区二区频| 久久综合网色—综合色88| 精品国产一区二区亚洲人成毛片| 亚洲精品一区二区三区福利| 久久久精品人体av艺术| 国产精品久久二区二区| 一区二区三国产精华液| 天天综合色天天综合色h| 蜜臀久久久久久久| 国产乱码一区二区三区| 99久久精品国产导航| 欧美性做爰猛烈叫床潮| 日韩精品一区国产麻豆| 中文字幕亚洲电影| 奇米影视一区二区三区小说| 国产精品1区二区.| 久久精工是国产品牌吗| 欧美性猛片aaaaaaa做受| 黑人精品欧美一区二区蜜桃| 亚洲精品一区二区三区蜜桃下载| 久久久精品一品道一区| 国产精品无人区| 亚洲自拍偷拍图区| 九色综合国产一区二区三区| 成人va在线观看| 欧美精品乱码久久久久久| 久久综合久久综合久久| 洋洋成人永久网站入口| 久久成人免费电影| 91麻豆精品秘密| 精品国产露脸精彩对白| 夜夜精品视频一区二区| 国产成人综合视频| 91麻豆精品国产91久久久| 国产精品麻豆一区二区| 蜜乳av一区二区三区| 色一情一乱一乱一91av| 久久久亚洲精品石原莉奈| 亚洲成人三级小说| 99久久er热在这里只有精品66| 91.成人天堂一区| 亚洲精品视频免费看| 国产成人在线视频网站| 欧美一级久久久| 亚洲一级片在线观看| 福利电影一区二区| 日韩欧美在线不卡| 午夜av一区二区| 色天使色偷偷av一区二区| 国产精品无遮挡| 国产精品一区二区黑丝| 精品乱码亚洲一区二区不卡| 天天做天天摸天天爽国产一区| 91麻豆国产自产在线观看| 国产亚洲制服色| 久久99精品久久久久久国产越南 | 香蕉久久一区二区不卡无毒影院| 成人午夜碰碰视频| 国产日韩综合av| 国产尤物一区二区在线| 精品日韩一区二区三区| 人人爽香蕉精品| 欧美日韩电影一区| 首页国产丝袜综合| 欧美三级三级三级爽爽爽| 一区二区欧美在线观看| 欧洲av在线精品| 亚洲成人动漫精品| 欧美精品一二三区| 日本怡春院一区二区| 精品国产一二三| 极品少妇xxxx精品少妇偷拍| 亚洲精品一区二区三区在线观看| 久久99精品国产麻豆婷婷洗澡| 日韩精品一区二区三区在线播放 | 91美女视频网站| 亚洲一区二区三区小说| 欧美影视一区二区三区| 午夜精品福利一区二区三区av| 69p69国产精品| 黑人巨大精品欧美一区| 亚洲国产岛国毛片在线| 91视频精品在这里| 亚洲成av人片在线观看无码| 日韩丝袜情趣美女图片| 国产精品一区二区男女羞羞无遮挡| 国产区在线观看成人精品 | 一区二区三区高清不卡| 欧美妇女性影城| 国产风韵犹存在线视精品| **网站欧美大片在线观看| 欧美日韩性生活| 国产精品一区二区三区网站| 亚洲精品v日韩精品| 欧美精品丝袜久久久中文字幕| 精品一区精品二区高清| 17c精品麻豆一区二区免费| 欧美日韩激情一区| 国产美女一区二区| 亚洲综合免费观看高清完整版在线| 日韩一区二区精品在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 性久久久久久久| 国产欧美一二三区| 欧美日韩一区二区三区在线看| 国产主播一区二区| 亚洲午夜激情网页| 国产视频一区二区在线观看| 欧美日韩精品一区视频| 成人综合日日夜夜| 麻豆精品视频在线观看视频| |精品福利一区二区三区| 日韩免费在线观看| 色女孩综合影院| 成人小视频在线| 美日韩一级片在线观看| 亚洲无线码一区二区三区| 国产精品毛片久久久久久久| 欧美成人激情免费网| 欧美日韩一区视频| 99国产精品国产精品毛片| 国产精品综合av一区二区国产馆| 午夜精品一区二区三区免费视频 | 一区二区三区不卡视频| 中文无字幕一区二区三区| 欧美一二区视频| 欧美精品免费视频| 欧美三级韩国三级日本一级| 91视频免费播放| 9i在线看片成人免费| 国产精品一区2区|