Tree data structure in C#

前端 未结 20 2675
梦如初夏
梦如初夏 2020-11-22 08:30

I was looking for a tree or graph data structure in C# but I guess there isn\'t one provided. An Extensive Examination of Data Structures Using C# 2.0 explains a bit about w

20条回答
  •  甜味超标
    2020-11-22 08:50

    Here's my own:

    class Program
    {
        static void Main(string[] args)
        {
            var tree = new Tree()
                .Begin("Fastfood")
                    .Begin("Pizza")
                        .Add("Margherita")
                        .Add("Marinara")
                    .End()
                    .Begin("Burger")
                        .Add("Cheese burger")
                        .Add("Chili burger")
                        .Add("Rice burger")
                    .End()
                .End();
    
            tree.Nodes.ForEach(p => PrintNode(p, 0));
            Console.ReadKey();
        }
    
        static void PrintNode(TreeNode node, int level)
        {
            Console.WriteLine("{0}{1}", new string(' ', level * 3), node.Value);
            level++;
            node.Children.ForEach(p => PrintNode(p, level));
        }
    }
    
    public class Tree
    {
        private Stack> m_Stack = new Stack>();
    
        public List> Nodes { get; } = new List>();
    
        public Tree Begin(T val)
        {
            if (m_Stack.Count == 0)
            {
                var node = new TreeNode(val, null);
                Nodes.Add(node);
                m_Stack.Push(node);
            }
            else
            {
                var node = m_Stack.Peek().Add(val);
                m_Stack.Push(node);
            }
    
            return this;
        }
    
        public Tree Add(T val)
        {
            m_Stack.Peek().Add(val);
            return this;
        }
    
        public Tree End()
        {
            m_Stack.Pop();
            return this;
        }
    }
    
    public class TreeNode
    {
        public T Value { get; }
        public TreeNode Parent { get; }
        public List> Children { get; }
    
        public TreeNode(T val, TreeNode parent)
        {
            Value = val;
            Parent = parent;
            Children = new List>();
        }
    
        public TreeNode Add(T val)
        {
            var node = new TreeNode(val, this);
            Children.Add(node);
            return node;
        }
    }
    

    Output:

    Fastfood
       Pizza
          Margherita
          Marinara
       Burger
          Cheese burger
          Chili burger
          Rice burger
    

提交回复
热议问题