Ho una struttura dati che descrive un albero. I nodi sono ordinati, con informazioni "di profondità" e conoscendo l'ordine e la profondità dell'albero possono essere ricostruiti. Non sono del tutto sicuro di come descriverlo, quindi spero che questo piccolo esempio lo illustri
node #1, depth 0 // parent: none
node #2, depth 1 // parent: #1
node #3, depth 1 // parent: #1
node #4, depth 2 // parent: #3
node #5, depth 1 // parent: #1
node #6, depth 2 // parent: #5
(Ho aggiunto informazioni parent per chiarimenti. Non fa parte della struttura dati.)
Sto provando a scrivere un algoritmo (in JS, se questo è un aiuto) che andrà a scorrere su ogni nodo e costruirà un albero fuori dai dati. Sono abbastanza ricorsivo è la strada da percorrere ma oltre a questo non sono sicuro da dove cominciare. Qualche suggerimento?
Modifica: per come la vedo io ho quattro casi:
- Il nodo ha la profondità 0 (caso iniziale)
- Il nodo ha la stessa profondità del precedente
- Il nodo ha una profondità maggiore come precedente (dovrebbe essere solo precedente.depth + 1)
- Il nodo ha una profondità inferiore rispetto al precedente
Ecco il mio pseudo-codice JS finora:
process (nodes, 0);
process = function(nodes, i) {
cur = nodes[i], prev = nodes[i-1]
if cur.depth = 0 then cur.parent = null // case #1
else if cur.depth == prev.depth then cur.parent = prev.parent // case #2
else if cur.depth > prev.depth then cur.parent = prev // case #3
else // case #4... here's where I'm stuck.
if i <= nodes.length then process (nodes, i+1)
}