Listing 2. TreeNode Class /* * TreeNode */ using System; namespace PersistentTrees { /// /// Description of TreeNode. /// public class TreeNode { public TreeNode() { } private TreeNode left; // Left child private TreeNode right; // Right child private string key; // Key for this node private Object[] data; // Data associated with key // Create a new TreeNode, loaded with // key and data. public TreeNode(string _key, Object _data) { left = null; right = null; key = _key; data = new Object[1]; data[0] = _data; } // addData // Adds new data item to an existing node. // The array is extended. public void addData(Object _data) { Object[] newdata = new Object[data.Length+1]; Array.Copy(data,0,newdata,0,data.Length); newdata[data.Length]=_data; data = newdata; } // Property access public TreeNode Left { get { return left; } set { left = value; } } public TreeNode Right { get { return right; } set { right = value; } } public string Key { get { return key; } set { key = value; } } public Object[] getData() { return data; } } }