亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#樹類型及其遍歷

2019-11-14 14:01:07
字體:
來源:轉載
供稿:網友

最近有個項目不僅需要取部門的層級關系,還要處理不規則的關系(移除某個部門),只有樹結構才能實現相關遍歷和操作。

涉及到的知識點:泛型、遞歸、數據結構

既然研究樹類型就先來看下樹的定義:

一棵樹(tree)是由n(n>0)個元素組成的有限集合,其中:

(1)每個元素稱為結點(node);

(2)有一個特定的結點,稱為根結點或根(root);

(3)除根結點外,其余結點被分成m(m>=0)個互不相交的有限集合,而每個子集又都是一棵樹(稱為原樹的子樹);——百度

本文將簡化樹,只研究樹的結點-結點樹。結點樹包含:父結點(根結點的父結點為null)、子結點(List集合)、數據對象。

 

類的設計:

public class BoTree<T>    {        public BoTree()        {            nodes = new List<BoTree<T>>();        }        public BoTree(T data)        {            this.Data = data;            nodes = new List<BoTree<T>>();        }        PRivate BoTree<T> parent;        /// <summary>        /// 父結點        /// </summary>        public BoTree<T> Parent        {            get { return parent; }        }        /// <summary>        /// 結點數據        /// </summary>        public T Data { get; set; }        private List<BoTree<T>> nodes;        /// <summary>        /// 子結點        /// </summary>        public List<BoTree<T>> Nodes        {            get { return nodes; }        }        /// <summary>        /// 添加結點        /// </summary>        /// <param name="node">結點</param>        public void AddNode(BoTree<T> node)        {            if (!nodes.Contains(node))            {                node.parent = this;                nodes.Add(node);            }        }        /// <summary>        /// 添加結點        /// </summary>        /// <param name="nodes">結點集合</param>        public void AddNode(List<BoTree<T>> nodes)        {            foreach (var node in nodes)            {                if (!nodes.Contains(node))                {                    node.parent = this;                    nodes.Add(node);                }            }        }        /// <summary>        /// 移除結點        /// </summary>        /// <param name="node"></param>        public void Remove(BoTree<T> node)        {            if (nodes.Contains(node))                nodes.Remove(node);        }        /// <summary>        /// 清空結點集合        /// </summary>        public void RemoveAll()        {            nodes.Clear();        }    }

測試:

首先創建一個學生類(任意)

public class Student    {        public Student(string name, string sex, int age)        {            this.Name = name;            this.Sex = sex;            this.Age = age;        }        public string Name { get; set; }        public string Sex { get; set; }        public int Age { get; set; }    }

初始化樹:

BoTree<Student> tree1 = new BoTree<Student>();tree1.Data = new Student("小波1", "", 18);BoTree<Student> tree2 = new BoTree<Student>();tree2.Data = new Student("小波2", "", 19);BoTree<Student> tree3 = new BoTree<Student>();tree3.Data = new Student("小波3", "", 20);BoTree<Student> tree4 = new BoTree<Student>();tree4.Data = new Student("小波4", "", 21);tree1.AddNode(tree2);tree1.AddNode(tree3);tree3.AddNode(tree4);

調試:

可以從監視中看出tree1有2個子結點

可以看出tree4的父結點為tree3

下面我們來遍歷這棵樹:

public static void Recursive(BoTree<Student> tree)        {            Console.WriteLine("姓名:{0},姓名:{1},年齡:{2}", tree.Data.Name, tree.Data.Sex, tree.Data.Age);            if (tree.Nodes.Count > 0)            {                foreach (var item in tree.Nodes)                {                    Recursive(item);                }            }        }

調用結果:

需要說明的是:不要嘗試用Nodes.Add(T item)來添加結點,而是用AddNode方法來添加結點。AddNode方法將對Parent進行賦值,保證了父結點可查詢

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人一区二区三区电影| 5566成人精品视频免费| 日本韩国在线不卡| 欧美精品久久久久a| 欧美一乱一性一交一视频| 亚洲最新av在线网站| 国产欧美一区二区白浆黑人| 欧美视频在线观看免费网址| 少妇av一区二区三区| 91豆花精品一区| 欧美精品精品精品精品免费| 欧美成人一区二区三区电影| 91精品国产自产在线老师啪| 国语自产精品视频在线看抢先版图片| 亚洲韩国青草视频| 欧美性猛xxx| 亚洲成人久久久| 日韩高清有码在线| 国产综合久久久久| 欧美理论在线观看| 国产精品视频中文字幕91| 欧美疯狂xxxx大交乱88av| 国产91热爆ts人妖在线| 91国产在线精品| 日韩国产欧美精品一区二区三区| 欧美亚洲视频一区二区| 伊人久久五月天| 国产精品视频免费观看www| 成人在线精品视频| 性欧美xxxx| 欧美综合在线第二页| 麻豆乱码国产一区二区三区| 粉嫩老牛aⅴ一区二区三区| 91亚洲一区精品| 福利一区福利二区微拍刺激| 一本大道亚洲视频| 欧美一级bbbbb性bbbb喷潮片| 91精品久久久久久久久| 亚洲国产精品国自产拍av秋霞| 国产亚洲欧洲高清| 日本亚洲欧美成人| 孩xxxx性bbbb欧美| 久久久久久久国产| 中文字幕精品一区二区精品| 久久免费视频在线| 欧美激情视频在线免费观看 欧美视频免费一| 国产综合在线观看视频| 欧美第一黄色网| 欧美成人精品在线| 日本一区二三区好的精华液| 亚洲码在线观看| 精品视频久久久久久| 精品国产网站地址| 亚洲综合小说区| 一区二区在线免费视频| 91tv亚洲精品香蕉国产一区7ujn| 久久亚洲国产精品成人av秋霞| 国产精品户外野外| 日韩电影免费在线观看中文字幕| 久久精品国产精品亚洲| 视频在线观看一区二区| 成人国产在线视频| 97av在线视频| 日韩有码视频在线| 国产成人亚洲综合青青| 自拍偷拍亚洲区| 亚洲a级在线播放观看| 91日本在线观看| www.国产精品一二区| 国产成人精品亚洲精品| 黄色成人av在线| 亚洲欧美国产精品专区久久| 超碰97人人做人人爱少妇| 亚洲午夜精品久久久久久久久久久久| 久热在线中文字幕色999舞| 欧美电影免费播放| 日韩精品中文字幕有码专区| 成人在线国产精品| 亚洲天堂一区二区三区| 国产aⅴ夜夜欢一区二区三区| 日本欧美黄网站| 亚洲人成在线观看网站高清| 亚洲xxxx做受欧美| 欧美综合一区第一页| 国产日韩换脸av一区在线观看| 国产精品久久久久久久久久三级| 国产精品十八以下禁看| 精品亚洲aⅴ在线观看| 久久久精品在线观看| 国产精品久久久久久久久影视| 日韩av影视在线| 国产一区二区三区视频免费| 久久精品视频99| 国产精品极品尤物在线观看| 日韩欧美国产视频| 成人h片在线播放免费网站| yellow中文字幕久久| 国产精品情侣自拍| 欧美激情一区二区三区高清视频| 国产成人亚洲综合91精品| 国产精品视频网站| 欧美最顶级的aⅴ艳星| 精品丝袜一区二区三区| 日韩专区在线观看| 在线一区二区日韩| 国产精品96久久久久久又黄又硬| 国产欧美最新羞羞视频在线观看| 亚洲成年网站在线观看| 91中文精品字幕在线视频| 原创国产精品91| 亚洲自拍中文字幕| 国产欧美va欧美va香蕉在| 欧美精品久久久久a| 国产成人精品久久| 久久久精品国产一区二区| 91久久国产婷婷一区二区| 国产91久久婷婷一区二区| 欧美日韩成人黄色| 九色成人免费视频| 亚洲成人黄色网址| 欧美激情高清视频| 亚洲视频一区二区三区| 中文字幕免费精品一区| 日韩欧美国产激情| 国内精品免费午夜毛片| 亚洲国产精品人久久电影| 欧美性视频在线| 中文字幕亚洲激情| 亚洲视频网站在线观看| 久精品免费视频| 国产精品黄页免费高清在线观看| 国产美女久久精品香蕉69| 久久视频免费观看| 视频在线观看一区二区| 国产成人一区二区在线| 欧美丰满片xxx777| 午夜美女久久久久爽久久| 亚洲国产精品999| 成人h片在线播放免费网站| 亚洲精品美女在线| 久久国产加勒比精品无码| 国产精品www色诱视频| 国产美女精品视频免费观看| 在线观看日韩www视频免费| 欧美激情免费观看| 欧美激情在线狂野欧美精品| 伦伦影院午夜日韩欧美限制| 欧美日韩中文字幕日韩欧美| 亚洲日本中文字幕免费在线不卡| 亚洲男人天天操| 亚洲人成网站777色婷婷| 亚洲aa中文字幕| 久久久久久久久久国产| 中文亚洲视频在线| 国模私拍一区二区三区| 国产精品专区h在线观看| 国产在线精品成人一区二区三区| 精品视频久久久久久| 久久久精品一区二区| 欧美成人精品三级在线观看| 欧美黄色小视频| 久久精品一本久久99精品| 亚洲精选一区二区| 亚洲欧美日韩精品久久|