using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
public class BoTree<T> where T : IPerson
{
private BoTree<T> parent;
/// <summary>
/// 父结点
/// </summary>
public BoTree<T> Parent
{
get { return parent; }
}
private List<BoTree<T>> nodes;
/// <summary>
/// 子结点
/// </summary>
public List<BoTree<T>> Nodes
{
get { return nodes; }
}
/// <summary>
/// 结点数据
/// </summary>
public T Data { get; set; }
public BoTree()
{
nodes = new List<BoTree<T>>();
}
public BoTree(T data)
{
this.Data = data;
nodes = new List<BoTree<T>>();
}
/// <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();
}
/// <summary>
/// 先序遍历
/// </summary>
/// <param name="t">遍历结果集</param>
/// <param name="tree">根节点</param>
/// <returns>遍历结果集</returns>
public List<T> FirstSearch(List<T> t, BoTree<T> tree)
{
t.Add(tree.Data);
if (tree.nodes != null)
{
FirstSearch(t, tree.nodes);
}
return t;
}
/// <summary>
/// 先序遍历
/// </summary>
/// <param name="t">遍历结果集</param>
/// <param name="trees">孩子节点</param>
/// <returns>遍历结果集</returns>
public List<T> FirstSearch(List<T> t, List<BoTree<T>> trees)
{
foreach (var tree in trees)
{
t.Add(tree.Data);
if (tree.nodes != null)
{
FirstSearch(t, tree.nodes);
}
}
return t;
}
}
}