Modifiye preorder ağaç kastetmek - sonraki düğümü bulma

1 Cevap php

Ben bu verileri var:

id | parent_id | lft | rgt | name
=====================================
1  | 0         | 1   | 8   | abc
2  | 3         | 5   | 6   | jkl
3  | 1         | 2   | 3   | def
4  | 0         | 9   | 10  | mnno
5  | 1         | 4   | 7   | ghi

Ben bu sırayla (kimlikleri) bu hiyerarşiyi çapraz gerekir: 1> 3> 5> 2> 4

Bunu nasıl başarabiliriz?

Ben node_x sonraki düğümü bulmak istediğinizi varsayalım.

if (node_x_rgt - node_x_lft == 1) {
    next_node_lft = node_x_rgt + 1;
} else {
    next_node_lft = node_x_lft + 1;
}

Bu formül sadece bazı durumlarda (düğüm kimlikleri 1,3,5,2) çalışır. Düğüm 2 bir sonraki düğüm 4 olmalıdır.

1 Cevap

Verdiğiniz bilgilerle ben tavsiye tüm denemek için:

select * from table order by id

btw, id 4 lft ve rgt sütunlar ağacının dışında, bir hata gibi görünüyor?

btw2, bu ödevi ise, gibi etiketlemek lütfen.

Edit: Sorunun sürüm 2:

Bu tür ağaçlara olarak değişmeyen var (lft < rgt) tüm düğümler için. Tablo sadece 1 kök düğüm varsa, diziler bu durum testlere hala hile yapar, testlere veya rgt değerler ya tarafından alınan (ama azalan sırayla rgt yoluyla alternatif olmaz) olabilir:

select * from table order by lft