public TreeNode(ITreeNode <T> parent, T value, ITreeFactory <T> treeFactory)
        {
            if (treeFactory == null)
            {
                throw new ArgumentNullException(nameof(treeFactory));
            }

            this.Children = treeFactory.CreateCollection(this);
            this._parent  = parent;
            this._value   = value;
        }