【愚公系列】2021年11月 C#版 数据结构与算法解析(树)
2023-04-18 14:26:47 时间
基本树的实现
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;
}
}
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击