Algoritmo per tornare lunghezza del ramo più corto di un albero binario

voti
0

Un albero binario può essere codificato utilizzando due funzioni L e R tale che per un nodo n, l (n) indica il figlio sinistro di n, r (n) dà diritto bambino di n.

Un ramo di un albero è un percorso dalla radice ad una foglia, la lunghezza di un ramo di un particolare foglia è il numero di archi sul percorso dalla radice a quella foglia.

Let MinBranch (l, r, x) un semplice algoritmo ricorsivo per prendere un albero binario codificato da L e R funzioni insieme con il nodo radice x per l'albero binario e restituisce il ramo più corto albero binario.

Si prega di fornire il pseudocodice per questo algoritmo.

È pubblicato 03/08/2009 alle 04:30
fonte dall'utente
In altre lingue...                            


4 risposte

voti
4

Guardate entrambi i rami. Trova la lunghezza del percorso più breve in ciascuno. Aggiungere uno al più piccolo e lo considerano il ramo più corto.

Risposto il 03/08/2009 a 04:31
fonte dall'utente

voti
0
function recurseMin(n)
{
if r(n) is null and l(n) is null, return 1
if r(n) is not null, rightSum = recurseMin( r(n-1) )
if l(n) is not null, leftSum = recurseMin ( l(n-1) )
return 1 + min( leftSum, rightSum )
}
Risposto il 03/08/2009 a 04:34
fonte dall'utente

voti
5

Vedo che hai le risposte ricevute su come ottenere la lunghezza del ramo più corto, ma il vostro compito a casa è in realtà per restituire il ramo stesso, presumibilmente come una lista di nodi. Quindi, ecco pseudocodice eseguibile (ad esempio, Python) per tornare in realtà il ramo, utilizzando Nonea significare nulla:

def MinBranch(l, r, x):
  if x is None: return []
  left_one = MinBranch(l, r, l(x))
  right_one = MinBranch(l, r, r(x))
  if len(left_one) < len(right_one):
    tail = left_one
  else:
    tail = right_one
  return [x] + tail
Risposto il 03/08/2009 a 04:48
fonte dall'utente

voti
1

È inoltre possibile trovare in O (2 R ), dove R è il risultato. Utile se l'albero è molto sbilanciato o infinito. E '<= O (N).

Si può fare questo con iterativo-approfondimento DFS.

Risposto il 03/08/2009 a 13:51
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more