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); }
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; }