public void Dodaj(int wartosc) { if (wartosc <= Wartosc) { if (Lewy == null) { Lewy = new Wezel(wartosc); } else { Lewy.Dodaj(wartosc); } } else { if (Prawy == null) { Prawy = new Wezel(wartosc); } else { Prawy.Dodaj(wartosc); } } }
public void Dodaj(int wartosc) { if (glowa == null) { glowa = new Wezel(wartosc); } else { glowa.Dodaj(wartosc); } }
public void ZamienZOjcem(int klucz) // O(logn), ogólnie zamiana jest O(1) ale znajdowanie rodzica jest O(logn) { if (glowa == null) { return; } Wezel Rodzic = glowa.ZnajdzRodzica(klucz); if (Rodzic == null) { return; } // Zależnie czy klucz jest prawym czy lewym dzieckiem mamy inne rotacje if (Rodzic.Lewy != null && Rodzic.Lewy.Wartosc == klucz) // Rotacja prawa { // po zamianie dziadek ma wskazywać na węzeł z kluczem Wezel dziadek = glowa.ZnajdzRodzica(Rodzic.Wartosc); Wezel Pom = Rodzic.Lewy; Rodzic.Lewy = Pom.Prawy; Pom.Prawy = Rodzic; // Rodzic = Pom; if (dziadek == null) { glowa = Pom; } else { if (dziadek.Lewy != null && dziadek.Lewy == Rodzic) { dziadek.Lewy = Pom; } else { dziadek.Prawy = Pom; } } } else // Rotacja lewa { // po zamianie dziadek ma wskazywać na węzeł z kluczem Wezel dziadek = glowa.ZnajdzRodzica(Rodzic.Wartosc); Wezel Pom = Rodzic.Prawy; Rodzic.Prawy = Pom.Lewy; Pom.Lewy = Rodzic; // Rodzic = Pom; if (dziadek == null) { glowa = Pom; } else { if (dziadek.Lewy != null && dziadek.Lewy == Rodzic) { dziadek.Lewy = Pom; } else { dziadek.Prawy = Pom; } } } }