ruta al nodo en el árbol de búsqueda binario como árbol de búsqueda binaria

ZachJH:

Estoy escribiendo una aplicación árbol binario de búsqueda, y yo quiero tener una función que encuentra un nodo y devuelve una lista doblemente enlazada de todos los nodos de la ruta que tomó para llegar allí. Sé que una lista doblemente enlazada se puede convertir en un árbol binario de búsqueda, por lo que sería muy agradable (y frío) para poder utilizar la misma clase.

Sin embargo, si hago copias poco profundas de todos los nodos en el camino y empezar a cambiar sus punteros para construir el árbol de búsqueda binaria quiero volver, obviamente voy a estar destruyendo el árbol original. No puedo hacer una copia profunda de todos los nodos, ya que voy a necesitar referencias a los nodos originales, que voy a utilizar para cambiar el árbol original (se podría borrar, equilibrio, ...).

Por ejemplo, podría tener una función de complemento que se encuentran las llamadas, que devuelve el último nodo de la ruta en la que el nuevo nodo se iría, y puedo simplemente colocarlo como uno de los niños allí. Si estoy escribiendo una clase de árbol binario de auto-equilibrio (/ Árbol Rojo Negro, AVL Árbol, Splay árbol), que puedo subclase fuera de éste, será bueno tener acceso al menos a los padres y abuelos del nodo Acabo de añadir (que tan sólo pudiera pista con punteros extra, pero entonces el método de búsqueda no es tan versátil).

Por supuesto, una solución es simplemente escribir otra clase. Otra solución sería que conformarse con una lista simplemente enlazada, y utilizar el otro puntero para referirse de nuevo al nodo original correspondiente. Pero, en este punto, se trata de algo más que tener una solución que funcione. El lenguaje que estoy usando es Java, pero definitivamente estaría interesado en saber si cualquier otro idioma tiene alguna característica para esto, también. No parece muy posible para mí, pero podría estar totalmente falta algo.

¿Alguien sabe si hay una manera de hacer esto, o tiene alguna sugerencia para lo que podría hacer en su lugar?

Daniel Junglas :

Por lo que desea utilizar la clase de nodo utilizado para el árbol binario para construir una lista doblemente enlazada. Asumo que esta clase nodo tiene cuatro campos: leffChild, rightChild, parent, data,, donde dataguarda los datos almacenados en el nodo. Ahora se puede abusar de estos campos para crear una lista doblemente enlazada, por ejemplo, utilizando leftChildcomo prevy rightChildcomo nextcampo del nodo de la lista doblemente enlazada. Si lo hace a continuación, puede seguir utilizando las parenty datalos campos de ese nodo. Así se pueden crear nuevos nodos de la lista doblemente enlazada, pero tienen el parentcampo de esos nodos apunte al nodo correspondiente en el árbol binario.

Dicho esto, el enfoque suena un poco extraño. Los nodos de la lista doblemente enlazada tendrán un campo sin usar. Por otra parte, Java proporciona java.util.LinkedList que implementa una lista doblemente enlazada. Así que no hay necesidad de rodar su propia ofuscado por el uso de nodos de árboles binarios.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=339204&siteId=1
Recomendado
Clasificación