public void AddElement(int key)
 {
     currNode = this.Tree;
     bool right = true;
     while (true)
     {
         if (currNode == null)
         {
             break;
         }
         if (currNode.Key == 0)
         {
             if (right)
             {
                 currNode.Key = key;
                 currNode.Right = new TreeNode();
                 currNode = currNode.Right;
                 Length++;
                 break;
             }
             else if (!right)
             {
                 currNode.Key = key;
                 currNode.Left = new TreeNode();
                 currNode = currNode.Left;
                 Length++;
                 break;
             }
         }
         else if (key > currNode.Key)
         {
             currNode = currNode.Right;
             right = true;
         }
         else if (key < currNode.Key)
         {
             currNode = currNode.Left;
             right = false;
         }
         else if (key == currNode.Key)
         {
             throw new Exception("Node exists");
         }
     }
 }
 public BinarySearchTree(int InitialKey)
 {
     Tree = new TreeNode(InitialKey);
     allNodes = new List<TreeNode>();
     currNode = this.Tree;
 }
        private List<TreeNode> EnumerateNodes(TreeNode currNode)
        {
            try
            {

                allNodes.Add(currNode);
                EnumerateNodes(currNode.Left);
                EnumerateNodes(currNode.Right);
            }
            catch (Exception)
            {
                return allNodes;
            }
            return allNodes;
        }
 private void RecursiveFind(TreeNode currNode, int key,out TreeNode node)
 {
     if (currNode == null)
     {
         node = null;
         return;
     }
     if (currNode.Key == key)
     {
         node = currNode;
         return;
     }
     RecursiveFind(currNode.Left, key, out node);
     RecursiveFind(currNode.Right, key, out node);
     return;
 }
 public TreeNode(int key)
 {
     this.Key = key;
     Right = new TreeNode();
     Left = new TreeNode();
 }