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