public bool Remove(Tkey key)
 {
     if (!Keys.Contains(key))
     {
         return(false);
     }
     if (Count == 0)
     {
         return(false);
     }
     if (key.Equals(this.key))
     {
         if (left == null && rigth == null) // Нет левого и правого дерева
         {
             this.key = default;
             value    = default;
         }
         else if (left == null && rigth != null) // Только правое
         {
             this.key = rigth.key;
             value    = rigth.value;
             left     = rigth.left;
             rigth    = rigth.rigth;
         }
         else if (left != null && rigth == null) // Только левое
         {
             this.key = left.key;
             value    = left.value;
             left     = left.left;
             rigth    = left.rigth;
         }
         else // Есть обе ветки
         {
             var newElement = _FindLeftElement(rigth);
             if (newElement.rigth == null)
             {
                 this.key = newElement.key;
                 value    = newElement.value;
                 var father = _FindFather(key, this);
                 father.left = null;
             }
             else
             {
                 this.key = newElement.key;
                 value    = newElement.value;
                 var father = _FindFather(key, this);
                 father.left = newElement.rigth;
             }
         }
     }
     else if (this.key.CompareTo(key) < 0)
     {
         left.Remove(key);
     }
     else
     {
         rigth.Remove(key);
     }
     return(true);
 }
 public void Clear()
 {
     left             = null;
     rigth            = null;
     FirstElementFlag = true;
     key   = default;
     value = default;
 }
        public Tvalue this[Tkey key]
        {
            get
            {
                if (!Keys.Contains(key))
                {
                    throw new KeyNotFoundException();
                }

                if (key.Equals(this.key))
                {
                    return(value);
                }
                else if (this.key.CompareTo(key) < 0) //Левая ветка
                {
                    return(left[key]);
                }
                else
                {
                    return(rigth[key]);
                }
            }
            set
            {
                if (FirstElementFlag)
                {
                    this.key         = key;
                    this.value       = value;
                    FirstElementFlag = false;
                }
                else if (this.key.CompareTo(key) < 0)
                {
                    if (left != null)
                    {
                        left[key] = value;
                    }
                    else
                    {
                        left      = new BinaryTreeDictionary <Tkey, Tvalue>();
                        left[key] = value;
                    }
                }
                else
                {
                    if (rigth != null)
                    {
                        rigth[key] = value;
                    }
                    else
                    {
                        rigth      = new BinaryTreeDictionary <Tkey, Tvalue>();
                        rigth[key] = value;
                    }
                }
            }
        }
        private BinaryTreeDictionary <Tkey, Tvalue> _FindLeftElement(BinaryTreeDictionary <Tkey, Tvalue> tree)
        {
            var res = tree;

            while (res.left != null)
            {
                res = res.left;
            }
            return(res);
        }
 private BinaryTreeDictionary <Tkey, Tvalue> _FindFather(Tkey branchKey, BinaryTreeDictionary <Tkey, Tvalue> tree)
 {
     if (tree.left.key.Equals(branchKey) || tree.rigth.key.Equals(branchKey))
     {
         return(tree);
     }
     else if (tree.key.CompareTo(key) < 0)
     {
         _FindFather(branchKey, left);
     }
     else
     {
         _FindFather(branchKey, rigth);
     }
     return(tree);
 }
Example #6
0
        static void Main(string[] args)
        {
            var BTD = new BinaryTreeDictionary <int, int>();

            BTD[0]  = 1;
            BTD[10] = 11;
            BTD[-1] = 0;
            var keys = BTD.Keys;
            var dic  = new Dictionary <int, int>();

            dic[0]  = 1;
            dic[10] = 11;
            dic[-1] = 0;
            Console.WriteLine(dic.Count);
            //foreach (var k in keys)
            //    Console.WriteLine(k);
            Console.ReadKey();
        }
 public BinaryTreeDictionary()
 {
     left             = null;
     rigth            = null;
     FirstElementFlag = true;
 }