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
timon27
post
Post #2





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

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


Po piersze zrezygnuj z kolumny id_parent, bo jest zbędna i znacznie utrudnia procedury.
Zakładam, że id jest autoincrement.
Piszę od ręki, więc pewnie są błędy, ale chodzi o ideę

  1. function dodaj($id){
  2. $r=mysql_query("SELECT * FROM drzewo WHERE id=$id");
  3.  
  4. $right=mysql_result($r,0,'right');
  5. if($right!=NULL){//tego nie jestem pewien
  6. mysql_query("INSERT INTO drzewo VALUES ('',NULL,NULL)");
  7. }
  8.  
  9. $left=mysql_result($r,0,'right');
  10. if($left!=NULL){//tego nie jestem pewien
  11. mysql_query("INSERT INTO drzewo VALUES ('',NULL,NULL)");
  12. }
  13.  
  14. dodaj($right);//drzewo rozrasta się niesymetrycznie, ale o tym już nie było mowy
  15. }


Ten post edytował timon27 13.09.2013, 20:34:08
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: 10.10.2025 - 05:05