Listing 2. TreeNode Class

/*
 * TreeNode
 */
using System;

namespace PersistentTrees
{
        /// <summary>
        /// Description of TreeNode.
        /// </summary>
        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;
                }

        }
}