Algoritmo para devolver la longitud de la rama más corta en un árbol binario

votos
0

Un árbol binario se puede codificar utilizando dos funciones l y r tales que, para un nodo n, l (n), el hijo izquierdo de n, r (n) da el hijo derecho de n.

Una rama de un árbol es un camino desde la raíz hasta una hoja, la longitud de una rama a una hoja en particular es la cantidad de arcos en la ruta desde la raíz hasta esa hoja.

Deje MinBranch (l, r, x) sea un algoritmo recursivo simple para tomar un árbol binario codificado por las funciones l y r junto con el nodo raíz x para el árbol binario y devuelve la rama más corta del árbol binario.

Proporcione el pseudocódigo para este algoritmo.

Publicado el 03/08/2009 a las 04:30
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
4

Mira ambas ramas. Encuentra la longitud del camino más corto en cada uno. Agregue uno al más pequeño y considérelo como la rama más corta.

Respondida el 03/08/2009 a las 04:31
fuente por usuario

votos
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 )
}
Respondida el 03/08/2009 a las 04:34
fuente por usuario

votos
5

Veo que ha recibido respuestas sobre cómo obtener la longitud de la rama más corta, pero su tarea es en realidad devolver la rama , presumiblemente como una lista de nodos. Entonces, aquí está el pseudocódigo ejecutable (es decir, Python) para devolver realmente la rama, usando Nonepara significar nulo:

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
Respondida el 03/08/2009 a las 04:48
fuente por usuario

votos
1

También puedes encontrarlo en O (2 R ) donde R es el resultado. Útil si el árbol está muy desequilibrado o es infinito. Es <= O (N).

Puede hacer esto con DFS de profundidad iterativa.

Respondida el 03/08/2009 a las 13:51
fuente por usuario

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