public void Wypisz(Wezel root) { if (root == null) { throw new NotImplementedException(); } Wypisz(root.lewy); Wypisz(root.prawy); }
public void RotacjaRR(ref Wezel root) { //zmiana pozycji Wezel A = root; root = A.lewy; Wezel II = root.prawy; root.prawy = A; root.prawy.lewy = II; }
public WezelPolski WstawSlowo(ref WezelPolski root, string slowoPolskie) { if (root == null) //gdy dotrze do końca drzewa, tworzy nowy element { root = new WezelPolski { slowo = slowoPolskie }; } else if (string.Compare(slowoPolskie, root.slowo) < 0) { WezelPolski lewy = (WezelPolski)root.lewy; root.lewy = WstawSlowo(ref lewy, slowoPolskie); root.waga++; } else if (string.Compare(slowoPolskie, root.slowo) > 0) { WezelPolski prawy = (WezelPolski)root.prawy; root.prawy = WstawSlowo(ref prawy, slowoPolskie); root.waga--; } else { throw new AVLException("Slowo znajduje sie juz w zbiorze, synonimy sa niedopuszczalne"); } //sprawdzanie wag /*if (root.waga == 0) * //w jaki sposób można przerwać rekurencje? * throw new NotImplementedException(); */ if (root.waga == 2) { if (root.lewy.waga == 1) { Wezel wezel = root; RotacjaRR(ref wezel); root = (WezelPolski)wezel; //ustawianie nowych wag root.waga = 0; root.prawy.waga = 0; } else { Wezel C = root.lewy.prawy; Wezel wezel = root.lewy; RotacjaLL(ref wezel); root.lewy = (WezelPolski)wezel; wezel = root; RotacjaRR(ref wezel); root = (WezelPolski)wezel; //ustawianie nowych wag root.waga = 0; switch (C.waga) { case (1): root.prawy.waga = 0; root.lewy.waga = -1; break; case (0): root.prawy.waga = 0; root.lewy.waga = 0; break; case (-1): root.prawy.waga = 0; root.lewy.waga = 1; break; } } } if (root.waga == -2) { if (root.prawy.waga == 1) { Wezel C = root.prawy.lewy; Wezel wezel = root.prawy; RotacjaRR(ref wezel); root.prawy = (WezelPolski)wezel; wezel = root; RotacjaLL(ref wezel); root = (WezelPolski)wezel; //ustawianie nowych wag root.waga = 0; switch (C.waga) { case (1): root.prawy.waga = 0; root.lewy.waga = -1; break; case (0): root.prawy.waga = 0; root.lewy.waga = 0; break; case (-1): root.prawy.waga = 0; root.lewy.waga = 1; break; } } else { Wezel wezel = root; RotacjaLL(ref wezel); root = (WezelPolski)wezel; //ustawianie nowych wag root.waga = 0; root.prawy.waga = 0; } } return(root); }
public void RotacjaLR(ref Wezel root) { throw new NotImplementedException(); }