博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
特别遍历树
阅读量:6607 次
发布时间:2019-06-24

本文共 3373 字,大约阅读时间需要 11 分钟。

hot3.png

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace TreeTest{    class Program    {        static List
>  letter = new List
>();        static void Main(string[] args)        {            Init();            List
> tt = Find("A");            Stack
 st = new Stack
();            Search(st, tt.ElementAt(0).Item1);            List < Letter > s=st.Reverse
().ToList
();            Console.WriteLine("******************************");            s.ForEach((o) => { o.write(); });        }        /// 
        /// 递归搜索树        ///         /// 
        /// 
        static void Search(Stack
 st, Letter t)        {            List
> fs = Fathers(t);            List
> cs = Children(t);            if (fs.Count > 0)            {//有父亲                 //查看是否存在未读取的父亲                bool allread = isAllRead(fs);                if (!allread)                {                    foreach (Connect
 tt in fs)                    {//迭代父节点                        if (tt.Item1.IsRead == false)                        {                            Search(st, tt.Item1);                        }                    }                }                else                {//父亲已经全部读取                    if (!st.Contains(t))                    {                        t.write();                        st.Push(t);                    }                }            }            else            {//无父亲 入栈                if (!st.Contains(t))                {                    t.write();                    st.Push(t);                }            }            if (cs.Count > 0)            {                //有孩子 遍历孩子                foreach (Connect
 tt in cs)                {//迭代父节点                    if(tt.Item2.IsRead==false)                    Search(st, tt.Item2);                }            }            else            {//无孩子 结束迭代                return;            }        }        static Boolean isAllRead(List
>  tt)        {            foreach (Connect
 t in tt)            {//迭代父节点                if (t.Item1.IsRead == false)                {                    return false;                }            }            return true;        }        static void Init()        {            Letter A = new Letter("A");            Letter B = new Letter("B");            Letter C = new Letter("C");            Letter D = new Letter("D");            Letter E = new Letter("E");            Letter F = new Letter("F");            Letter G = new Letter("G");            Letter H = new Letter("H");            Letter I = new Letter("I");            Letter J = new Letter("J");            Letter K = new Letter("K");            Letter L = new Letter("L");            Letter M = new Letter("M");            Letter N = new Letter("N");            Letter O = new Letter("O");            Letter P = new Letter("P");            Letter Q = new Letter("Q");            Letter R = new Letter("R");            letter.Add(new Connect
(A, B));            letter.Add(new Connect
(C, B));            letter.Add(new Connect
(B, D));            letter.Add(new Connect
(I,H));            letter.Add(new Connect
(J, H));            letter.Add(new Connect
(H, D));            letter.Add(new Connect
(F, E));            letter.Add(new Connect
(G,E));            letter.Add(new Connect
(E, D));            letter.Add(new Connect
(D, K));            letter.Add(new Connect
(K, L));            letter.Add(new Connect
(L,M));            letter.Add(new Connect
(L, N));            letter.Add(new Connect
(K, P));            letter.Add(new Connect
(P,Q));            letter.Add(new Connect
(P, R));        }        /// 
        /// 寻找起始节点        ///         /// 
        /// 
        static List
> Find(string s)        {            List
> tt = new List
>();            foreach (Connect
 t in letter)            {                if (t.Item1.Word== s)                {                    tt.Add(t);                }            }            return tt;        }        /// 
        /// 寻找所有父节点链接        ///         /// 
        /// 
        static List
> Fathers(Letter l)        {            List
> tt = new List
>();            foreach (Connect
 t in letter)            {                if (t.Item2 == l)                {                    tt.Add(t);                }            }            return tt;        }       /// 
       /// 寻找所有子节点链接       ///        /// 
       /// 
        static List
> Children(Letter l)        {            List
> tt = new List
>();            foreach (Connect
 t in letter)            {                if (t.Item1 == l)                {                    tt.Add(t);                }            }            return tt;        }    }    public class Letter    {        private string _word;        private Boolean _isRead;        public string Word        {            get { return _word; }            set { _word = value; }        }        public Boolean IsRead        {            get { return _isRead; }            set { _isRead = value; }        }        public Letter(string v)        {            this._word = v;            _isRead = false;        }        public void write() { Console.WriteLine(_word); _isRead = true; }    }    class Connect
 where T :class    {        public T Item1 { get; set; }        public T Item2 { get; set; }        public Connect(T t1, T t2)        {            Item1 = t1;            Item2 = t2;        }    }}

转载于:https://my.oschina.net/hunjixin/blog/615398

你可能感兴趣的文章
线性方程组迭代求解——Jacobi迭代算法(Python实现)
查看>>
vmware workstation14永久激活密钥分享
查看>>
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
查看>>
iOS 多线程 之 GCD(大中枢派发)(一)
查看>>
mysql用户与权限管理笔记
查看>>
Myeclipse中打开接口实现类的快捷键
查看>>
<20190516> 一次比较糟糕的售后维修体验(某硕主板)
查看>>
iOS网络篇2-http协议通信规则
查看>>
删除sql dump中的AUTO_INCREMENT
查看>>
使用JdbcTemplate和JdbcDaoSupport
查看>>
C博客作业--指针
查看>>
版本12.2.0.1.0数据库,复制种子数据库快速创建租户数据库PDB
查看>>
吴忠军中华演出网
查看>>
Page翻页分页css代码,分页div+css代码
查看>>
编程之美 第1章 游戏之乐——游戏中碰到的题目(十一)
查看>>
mysql for Mac 下创建数据表中文显示为?的解决方法
查看>>
2016阿里巴巴73款开源产品全向图
查看>>
Glibc 和 uClibc
查看>>
VMware 虚拟机的虚拟磁盘编程知识点扫盲之二
查看>>
vs2012中自带IIS如何让其他电脑访问
查看>>