前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2021年11月 C#版 数据结构与算法解析(树)

【愚公系列】2021年11月 C#版 数据结构与算法解析(树)

作者头像
愚公搬代码
发布2021-12-03 16:35:47
2240
发布2021-12-03 16:35:47
举报
文章被收录于专栏:历史专栏

基本树的实现

代码语言:javascript
复制
 public class Tree<T>
    {
        public Tree()
        {
            Deep = 1;
        }

        public int Deep { get; set; } 
        public string Name { get; set; } 
        public T Value { get; set; }
         
        public Tree<T> Perent { get; set; }
         
        private List<Tree<T>> Child = new List<Tree<T>>();
         
        public void AddChild(Tree<T> tree)
        {
            if (GetByName(tree.Name) != null)
            {
                return;
            }
            tree.Perent = this;
            tree.Deep = Deep + 1;
            Child.Add(tree);
        } 
        public void RemoveChild()
        {
            Child.Clear();
        }
         
        public Tree<T> GetByName(string name)
        {
            Tree<T> root = GetRootTree(this);
            List<Tree<T>> list = GatAll(root);
            var result = list.Where(c => c.Name == name).ToList();
            if (result.Count <= 0)
            {
                return null;
            }
            else
            {
                return result[0];
            }
        } 
        public List<Tree<T>> GatAll(Tree<T> tree)
        {
            List<Tree<T>> list = new List<Tree<T>>();
            list.Add(tree);
            if (tree.Child == null)
            {
                return null;
            }
            list.AddRange(tree.Child);
            foreach (var tree1 in tree.Child)
            {
                list.AddRange(GatAll(tree1));
            }
            return list.Distinct().ToList();
        }
         
        public Tree<T> GetRootTree(Tree<T> tree)
        {
            if (tree.Perent == null)
            {
                return tree;
            }
            return GetRootTree(tree.Perent);
        }
         
        public int GetDeep(Tree<T> tree)
        {
            List<Tree<T>> list = GetDeepTree(tree);
            return list.Max(c => c.Deep);
        }
         
        public List<Tree<T>> GetDeepTree(Tree<T> tree)
        {
            List<Tree<T>> list = new List<Tree<T>>();
            if (tree.Child.Count <= 0)
            {
                list.Add(tree);
            }
            else
            {
                foreach (var tree1 in tree.Child)
                {
                    if (tree1.Child.Count <= 0)
                    {
                        list.Add(tree1);
                    }
                    else
                    {
                        foreach (var tree2 in tree1.Child)
                        {
                            list.AddRange(GetDeepTree(tree2));
                        }
                    }
                }
            }
            return list;
        } 
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档