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;
        }
    }


}

 

posted @ 2017-03-08 16:08  花生打代码会头痛  阅读(111)  评论(0)    收藏  举报