Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> drzewo binarne - dodawanie wg poziomów
megasinski
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 3.11.2009

Ostrzeżenie: (0%)
-----


Witam
Mam pewien problem
Stworzyłem w mysql tabelę do której chciałbym wstawiać rekordy w pewien określony sposób.
Ma to być hierarchia binarna, czyli drzewko z dwoma odnogami za każdym razem.

tabela posiada kolumny id, id_parent, right, left

Do tabeli mają być dodawane nowe rekordy w taki sposób, aby najpierw, niezależnie od tego jak aktualnie wygląda struktura, rozpoczynając od wybranego rekordu, najpierw sprawdzał pierwszy poziom pod wybranym rekordem i jeśli jest wolne miejsce to w pierwszej kolejności dodawał nowy rekord do prawej odnogi a jeśli ta jest zajęta, to do lewej. Jeśli natomiast w poziomie pierwszym nie ma już miejsca to przechodzi do poziomu drugiego itd.

To co do tej pory wykombinowałem to przynosiło taki efekt, że najpierw sprawdzał prawą odnogę, jeśli była wolna to dopisywał, jeśli nie to sprawdzał lewą i jeśli była wolna to dopisywał, a jeśli nie to wtedy wchodzi w poziom niżej i do tego miejsca było OK, ale dalej kiedy sprawdził rekord w drugim poziomie to juz nie przechodził do następnego rekordu w tym poziomie tylko szedł niżej w będącej już odnodze i praktycznie pomijał pozostałe rekordy w danym poziomie.

Chodzi mi o to, żeby najpierw sprawdził poziom 1 pod jakimś tam rekordem, jeśli jest pełny to wtedy poziom 2, jeśli ten jest pełny to przechodzi do poziomu 3 itd.
Czy da się coś takiego stworzyć w PHP? Jeśli tak to w jaki sposób?
Pomocy please.
Mam nadzieję, że nie zagmatwałem pytania.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
megasinski
post
Post #2





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 3.11.2009

Ostrzeżenie: (0%)
-----


Idea jest dobra...
tylko jeszcze jeden mały problem.
Powiedzmy, że niektóre odnogi zostaną rozwinięte (przez kogoś)tak jak np. 3-6-10 i jeśli chcę dodać losowo kolejny ID to chcę żeby uzupełnił pierwszy pusty na najbliższym poziomie, czyli w tym wypadku będzie to drugie ramię trójki i tam wejdzie 11.
W tym momencie nawet jeśli dodam to pole, to wywołanie rodzica będzie błędne no i w wielu przypadkach dziecka też.
Go to the top of the page
+Quote Post
timon27
post
Post #3





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(megasinski @ 14.09.2013, 17:30:28 ) *
Powiedzmy, że niektóre odnogi zostaną rozwinięte (przez kogoś)tak jak np. 3-6-10...

1. drzewo musi mieć na samym początku określony korzeń.
Czyli musi istnieć pole id=0, sytuacja 3-6-10 nie jest dopuszczalna
2. Systuacja 0-3-6-10 również nie jest dopuszczalna, bo 10 powinno być dzieckiem 5 której nie ma, więc już wcześniej ktoś coś namieszał z drzewem.

Generalnie zakładamy że drzewo ma poprawną strukturę.
Wtedy dodanie w najwyższym miejscu, najbardziej na lewo (tak jak chcesz) = dodanie pola o najmniejszym niewykorzystanym id.
Dodanie dziecka pola o id=n to stworzenie pola o id=2n (lewe) lub 2n+1 (prawe).
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 15:06