2010-02-05 14 views
14

Me parece que no puede encontrar una respuesta definitiva para esto, yo estoy tratando de hacer algunas pruebas elementales sobre montones, pero esto es lo que me está arrojando un poco:¿Cuál es la definición de la altura de un árbol?

es un árbol vacío válida? Si es así, ¿cuál es su altura?
yo creo que esto sería 0.

¿Cuál es la altura de un árbol con un solo nodo?
Creo que esto sería 1, pero he visto definiciones donde es 0 (y si este es el caso, entonces no sé cómo explicar un árbol vacío).

Respuesta

9

Creo que debería echar un vistazo a Dictionary of Algorithms and Data Structures en el sitio web de NIST. No definition for height dice que un solo nodo es altura 0.

El definition of a valid tree incluye una estructura vacía. El sitio no menciona la altura de dicho árbol, pero según la definición de la altura, también debe ser 0.

+0

Gracias, es bueno tener una fuente confiable para citar esto (no pienses un profesor o una revisión por pares consideraría Wikipedia una fuente aceptable). Sus definiciones parecen ser un poco contradictorias, sin embargo, definen un árbol como "vacío (sin nodos), o una raíz y cero o más subárboles". Pero su definición de altura se define en términos del nodo raíz. – Brad

+0

Estoy de acuerdo. Creo que definitivamente debes enviarle un correo electrónico (para que puedas ser citado en esa página por mencionar esta distinción). Pero teniendo en cuenta que la definición implica el número máximo de bordes desde la raíz hasta una hoja, tenemos que decir que un árbol vacío tiene una altura 0. – nlucaroni

+0

Acabo de comprobar el nuevo Cormen y él no hace la distinción (página 1177) tampoco . – nlucaroni

16

La altura de un árbol es la longitud de la ruta desde la raíz de ese árbol hasta su nodo más lejano (es decir, el nodo de hoja más alejado de la raíz).

Un árbol con solo nodo raíz tiene altura 0 y un árbol con cero nodos se consideraría vacío. Un árbol vacío tiene una altura de -1. Por favor marque this.

Espero que esto ayude.

+0

Creo que es una cuestión de convención utilizada en la implementación. Como todos los valores de altura positivos y el valor de altura cero aparecerían representados cuando tiene uno o más nodos en el árbol, debería tener algo para representar un árbol vacío. Entonces la convención lo tiene como -1. Puedes tenerlo como cualquier otro valor negativo. Es una cuestión de implementación como la abstracción real de la estructura de datos: el árbol no cubriría estas cosas. – Arnkrishn

+1

La convención del árbol vacío que tiene una altura -1 en realidad tiene cierto uso práctico en los árboles AVL, ya que simplifica el cálculo del factor de equilibrio y cuándo rotar los niños. Esta implementación lo demuestra en la práctica: http://users.cis.fiu.edu/~weiss/dsaajava/code/DataStructures/AvlTree.java – Robert

5

Lo he visto utilizado en ambos sentidos (contando un solo nodo como 0 o 1), pero la mayoría de las fuentes definiría un árbol de raíz como un árbol de altura 0, y no consideraría un 0-nodo árbol válido.

0

De acuerdo con Wikipedia, la altura de un (sub-) árbol con un solo nodo es 0. La altura de un árbol sin nodos sería -1. Pero creo que depende de ti, cómo defines la altura y tus pruebas deberían funcionar con cualquiera de las definiciones.

2

Si su árbol es una estructura de datos definida recursivamente que puede estar vacía o un nodo con un subárbol izquierdo y derecho (por ejemplo, árboles de búsqueda, o su montón), entonces la definición natural es asignar 0 al árbol vacío y 1 + la altura del subárbol más alto a un árbol no vacío.

Si su árbol es un gráfico, la definición natural es la ruta más larga desde la raíz hasta una hoja, por lo que un árbol con raíz única tiene profundidad 0. Normalmente, ni siquiera consideraría árboles vacíos en este caso.

+0

Me gustaría señalar que (a) obviamente tiene razón, y (b) el NIST y muchas otras personas no ven las cosas (y) a nuestra manera. Creo que este desafortunado estado de cosas se debe principalmente a CLR, que sufre de "miedo a la nulidad". –

1

La altura de un árbol es la longitud de la ruta más larga a un nodo terminal en cualquiera de sus elementos secundarios.

Wikipedia dice the height of an empty tree is -1. Estoy en desacuerdo. Un árbol vacío es literalmente solo un árbol que contiene un nodo terminal (un valor nulo o especial que representa un árbol vacío). Como el nodo no tiene hijos, la longitud de su ruta más larga debe ser empty sum = 0, no -1.

Del mismo modo, un árbol no vacío tiene dos hijos, por lo que por definición hay al menos una ruta> = 1 a un nodo de terminal.

Podríamos definir nuestro árbol de la siguiente manera:

type 'a tree = 
    | Node of 'a tree * 'a * 'a tree 
    | Nil 

let rec height = function 
    | Node(left, x, right) -> 1 + max (height left) (height right) 
    | Nil -> 0 
+0

"Un árbol vacío es literalmente solo un árbol que contiene un nodo terminal". No, incluso más vacío que eso ... – Thomas

+0

+1 a causa de Caml – Wok

-3

actully un defn perfectamente al crecimiento del árbol es el nivel D de la hoja de d camino más largo desde la raíz, más 1..accordin 2 fa este árbol defn s vacía , no tendrá ningún nivel. No puede considerar que tenía cero, porque el nivel de una raíz es cero. El nivel del árbol vacío es -1, entonces, el defnin 2 es -1 + 1 = 0..so ZERO sd altura de vacío árbol ... bt n muchos libros que han dado -1 bt no se han dado explicaciones

Cuestiones relacionadas