예제 #1
0
 private void AddToTree(ref BinaryTreeItem <T> node, T value)
 {
     // необходимо передавать узел по ссылке, так как иначе в метод передастя переменная, в которой находится ссылка (число) на узел
     //следовательно при присвоении этой ссылке новго узла старый узел не изменится, так и останется Null, следовательно нам надо поменть именно ту ссылку.
     if (node == null)
     {
         node = new BinaryTreeItem <T>()
         {
             Value = value
         };
         return;
     }
     else
     {
         //значение в узле больше добавляемого элемента, значит он находится в левом поддереве, иначе в правом
         if (node.Value.CompareTo(value) == 1)
         {
             AddToTree(ref node.LeftChild, value);
         }
         else
         {
             AddToTree(ref node.RightChild, value);
         }
     }
 }
예제 #2
0
 private IEnumerable <T> PostfixTraverse(BinaryTreeItem <T> node)
 {
     if (node == null)
     {
         yield break;
     }
     else
     {
         foreach (var el in PostfixTraverse(node.LeftChild))
         {
             yield return(el);
         }
         foreach (var el in PostfixTraverse(node.RightChild))
         {
             yield return(el);
         }
         yield return(node.Value);
     }
 }
예제 #3
0
 private bool Find(BinaryTreeItem <T> node, T key)
 {
     if (node == null)
     {
         return(false);
     }
     else
     {
         if (node.Value.CompareTo(key) == 0)
         {
             return(true);
         }
         else if (node.Value.CompareTo(key) == 1)
         {
             return(Find(node.LeftChild, key));
         }
         else
         {
             return(Find(node.RightChild, key));
         }
     }
 }
예제 #4
0
 public BinaryTree()
 {
     root = null;
 }