delegate void TreeVisitor<T>(T nodeData);

class NTree<T>
{
private T data;
private LinkedList<NTree<T>> children; public NTree(T data)
{
this.data = data;
children = new LinkedList<NTree<T>>();
} public void AddChild(T data)
{
children.AddFirst(new NTree<T>(data));
} public NTree<T> GetChild(int i)
{
foreach (NTree<T> n in children)
if (--i == 0)
return n;
return null;
} public void Traverse(NTree<T> node, TreeVisitor<T> visitor)
{
visitor(node.data);
foreach (NTree<T> kid in node.children)
Traverse(kid, visitor);
}
}
namespace Overby.Collections
{
public class TreeNode<T>
{
private readonly T _value;
private readonly List<TreeNode<T>> _children = new List<TreeNode<T>>(); public TreeNode(T value)
{
_value = value;
} public TreeNode<T> this[int i]
{
get { return _children[i]; }
} public TreeNode<T> Parent { get; private set; } public T Value { get { return _value; } } public ReadOnlyCollection<TreeNode<T>> Children
{
get { return _children.AsReadOnly(); }
} public TreeNode<T> AddChild(T value)
{
var node = new TreeNode<T>(value) {Parent = this};
_children.Add(node);
return node;
} public TreeNode<T>[] AddChildren(params T[] values)
{
return values.Select(AddChild).ToArray();
} public bool RemoveChild(TreeNode<T> node)
{
return _children.Remove(node);
} public void Traverse(Action<T> action)
{
action(Value);
foreach (var child in _children)
child.Traverse(action);
} public IEnumerable<T> Flatten()
{
return new[] {Value}.Concat(_children.SelectMany(x => x.Flatten()));
}
}
}

最新文章

  1. java 深入技术三(List)
  2. no.1
  3. C++ Split string into vector&lt;string&gt; by space
  4. Java文件操作①——XML文件的读取
  5. POJ 2653 Pick-up sticks(判断线段相交)
  6. 深入理解JavaScript-replace
  7. Oracle 6 - 锁和闩 - 锁类型
  8. 注意EntityFramework.extended中的坑
  9. TS格式解析
  10. Android Studio 1.0.2 设置内存大小
  11. LabVIEW系列——拍振现象重现
  12. codevs2059逃出克隆岛(传送门bfs)
  13. [React Testing] Intro to Shallow Rendering
  14. MVC3 分页Helper
  15. MySQL5.7 安装过程中出现 attempting to start service 过不去
  16. 模板C++ 03图论算法 1最短路之单源最短路(SPFA)
  17. 亚马逊AWS EC2云实例AMI安装LNMP环境(1)——Nginx安装
  18. Ubuntu16.04.1安装JDK1.8.0
  19. 【Jenkins】Jenkins权威指南英文版:jenkins-the-definitive-guide.pdf
  20. JavaScript(第三十二天)【Ajax】

热门文章

  1. 20165203《Java程序设计》第九周学习总结
  2. NSPredicate用法总结(Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取)
  3. RabbitMQ系列之RabbitMQ单机安装
  4. day6作业--选课系统
  5. day4 计算器
  6. too many open file /etc/security/limits.conf
  7. PHP学习日记 Windows配置PHP+Nginx+自动化脚本
  8. Redis的安装与部署(CentOS6.5)
  9. Linux基础命令—网卡
  10. android 后台 activity 被系统回收 保存状态