function funprop(f,p)
{
return function s(a,b)
{
if(a<=b)
{
let arr = [];
let c = arr.length;
for (let i = a; i <= b; i++)
{
arr [c] = i;
c++;
}
return arr;
}
};
}
Si consideri un albero k-ario, in cui i nodi hanno la struttura {val: n, figli: [ t1, ..., tk ]}, come visto a lezione. Si vuole distribuire l’eredità di ogni nodo intermedio ai suoi figli in questo modo: il valore n di un nodo viene distribuito in parti uguali ai figli, ciascuno dei quali riceve dunque n/k. La quota ereditata viene sommata al valore di n di ciascun erede, e se l’erede non è una foglia, il risultato viene ulteriormente diviso ai figli, e così via.
Si scriva una funzione eredita(t) che, ricevuto come argomento un albero t nel formato descritto sopra, restituisca il valore totale (n proprio più quota ereditata) del nodo foglia con valore massimo.
Esempi:
t={val: 16, figli: [{val: 4},{val: 2, figli: [{val: 8},{val: 2}]}]}
eredita(t) → 13
eredita({val: 5}) → 5
Ragionamento: t={val: 16, figli: [{val: 4},{val: 2, figli: [{val: 8},{val: 2}]}]} eredita(t) → 13
function conta_nodi(t,n)
{
let val = 0;
if(t.figli) //nodo
{
let c = 0; let y = 0;
c = (n+t.val) / t.figli.length;
for(let i in t.figli)
{
y = conta_nodi(t.figli[i], c);
if(i=0)
val = y
else if (y>val)
val = y;
}
}
else //nodo foglia
{
val = n + t.val;
if(n > val)
val = n;
}
return val;
}
function eredita(t)
{
//se la radice ha figli
if(t.figli)
{
let c = 0;
let max = 0;
let n = t.val / t.figli.length;
for(let i in t.figli)
{
c = conta_nodi(t.figli[i], n);
if(c > max)
{
max = c;
}
}
return max;
}
else //altrimenti restituisce val
{
return t.val;
}
}