¿Hay alguna razón para almacenar cosas en una lista en lugar de un árbol?

Supongo que por “lista” te refieres a una lista vinculada. Tenga en cuenta que una “lista” en casi todos los casos se implementa como una matriz dinámica (Java / C # / Python / etc.todos lo hacen con sus tipos de datos predeterminados “Lista”).

Si es así, una lista vinculada tiene más sentido si sus datos son simplemente un elemento que sigue a otro en lugar de alguna forma de jerarquía o relación específica entre sí. Si solo trabaja en el primer o último elemento de una lista, entonces una lista vinculada tiene más sentido. Muy a menudo, las listas enlazadas se utilizan para implementar estructuras como colas y pilas, un árbol o matriz puede ser engorroso y / o restrictivo para estos. Además, si solo recorre toda la lista de principio a fin, probablemente no necesite poder indexar en una ubicación aleatoria o tenerla en un orden predefinido.

Si desea organizar los elementos de manera que cualquier elemento pueda tener uno o más subelementos, cada uno de los cuales puede tener sus propios subelementos, etc., esto es para qué sirven los árboles (es decir, desea cierta jerarquía de elementos y sus subelementos). Un caso especial son los árboles binarios que tienden a usarse como árboles de búsqueda binaria, que es una forma de tener subelementos ordenados en orden. No siempre tiene o incluso desea un orden ordenado, por lo que puede que no sea necesario.

En general, es menos intensivo en recursos almacenar un nodo en una lista vinculada que en un árbol, se necesitan menos referencias por nodo, especialmente en listas enlazadas. Por lo tanto, podría ayudar a reducir un poco los requisitos de memoria. Aunque lo más eficiente (en cuanto al espacio) sería una matriz en su lugar, no se necesitan referencias.

Una lista respaldada por una matriz tiene O (1) complejidad para acceder a un elemento arbitrario en esa colección, utilizando su índice. Una estructura de datos de árbol generalmente no tiene dicha operación, por lo que si desea acceder a un elemento aleatorio, tendría que iterar los nodos en el árbol para encontrarlo (suponiendo que el árbol esté ordenado y el índice haga referencia a ese orden).

En otras palabras, una lista respaldada por una matriz es perfecta si desea acceder aleatoriamente a sus elementos por índice. Un árbol ni siquiera trata ese concepto.

Dado que una lista enlazada individualmente puede considerarse como una clase especial de árbol, en la que ningún nodo tiene más de 1 hijo, se podría argumentar que ‘en lugar de’ no tiene sentido.

Las listas son;

  • más simple
  • tienden a usar menos memoria
  • acceso más rápido si son pequeños
  • preservar el orden
  • O (1) acceso por índice.

La razón es tan simple, si desea que sus datos estén en forma jerárquica, simplemente almacénelos en un árbol.