Tree ==== **Energy.Base.Tree**, **Energy.Base.TreeNode** and **Energy.Base.TreeNodeList** provide a simple generic tree structure. TreeNode ----------- A node can hold a typed value, an optional associated object, and a list of child nodes. ```csharp Energy.Base.TreeNode root = new Energy.Base.TreeNode("Root"); Energy.Base.TreeNode child1 = root.Children.Add("Child 1"); Energy.Base.TreeNode child2 = root.Children.Add("Child 2"); child1.Children.Add("Grandchild 1"); child1.Children.Add("Grandchild 2"); Console.WriteLine(root.ToString("+ ")); ``` Tree ------- **Energy.Base.Tree** is a root node that does not render its own value, only its children. ```csharp Energy.Base.Tree tree = new Energy.Base.Tree(); tree.Children.Add("a"); Energy.Base.TreeNode b = tree.Children.Add("b"); b.Children.Add("d"); b.Children.Add("e"); Energy.Base.TreeNode c = tree.Children.Add("c"); c.Children.Add("f"); Console.WriteLine(tree.ToString("+ ")); ``` Properties and methods ---------------------- | Member | Description | |--------|-------------| | `TreeNode.Value` | Node value. | | `TreeNode.Object` | Optional associated object. | | `TreeNode.Children` | Child node list. | | `TreeNode.Parent` | Parent node. | | `TreeNode.Root` | Top-level node. | | `TreeNode.Depth` | Depth of the node. | | `TreeNode.ToString(string indent)` | Render the tree with the given indent string. | | `TreeNodeList.Add(T value)` | Add a value and return the new node. | | `TreeNodeList.Add(TreeNode item)` | Add an existing node. |