My best advice would be that there is no standard tree data structure because there are so many ways you could implement it that it would be impossible to cover all bases with one solution. The more specific a solution, the less likely it is applicable to any given problem. I even get annoyed with LinkedList – what if I want a circular linked list?
The basic structure you’ll need to implement will be a collection of nodes, and here are some options to get you started. Let’s assume that the class Node is the base class of the entire solution.
If you need to only navigate down the tree, then a Node class needs a List of children.
If you need to navigate up the tree, then the Node class needs a link to its parent node.
Build an AddChild method that takes care of all the minutia of these two points and any other business logic that must be implemented (child limits, sorting the children, etc.)
delegate void TreeVisitor
class NTree
{
private T data;
private LinkedList
public NTree(T data)
{
this.data = data;
children = new LinkedList
}
public void AddChild(T data)
{
children.AddFirst(new NTree
}
public NTree
{
foreach (NTree
if (–i == 0)
return n;
return null;
}
public void Traverse(NTree
{
visitor(node.data);
foreach (NTree
Traverse(kid, visitor);
}
}
Simple recursive implementation…
< 40 lines of code...
You just need to keep a reference to the root of the tree outside of the class,
or wrap it in another class, maybe rename to TreeNode??