Sí, tiene que ser recursivo.
Sus clases ya están estructuradas de una manera que hace que esto sea bastante simple de implementar.
EmptyTree
es tu caso base. copyTree()
en EmptyTree
simplemente devuelve la instancia singleton de EmptyTree
.
- Dados dos archivos de registro, cada uno con mil millones de nombres de usuario, ¿cómo podemos encontrar todos los nombres de usuario presentes en ambos archivos de registro de manera eficiente?
- ¿Qué estructuras de datos y algoritmos deben conocer todos los estudiantes de ciencias de la computación / ingeniería?
- Cómo resolver este problema DP (http://codeforces.com/gym/101061/problem/F)
- ¿Cuánto tiempo se necesita para leer Introducción a Algoritmos de TH Cormen, para un principiante?
- ¿Cómo funcionará el algoritmo KNN para la segmentación de imágenes?
Para NonEmptyTree
, solo construye una nueva instancia de NonEmptyTree
, con la key
y el value
copiados de la instancia de destino (“actual”), y los subárboles izquierdo y derecho creados al llamar a copyTree()
en los subárboles izquierdo y derecho de la instancia de destino.
Dependiendo de cómo configure su constructor (yo mismo uso clases inmutables, sin getters ni setters), esto sería algo como:
clase pública NonEmptyTree <K extiende Comparable , V> extiende Árbol {
clave K final pública;
valor V final público;
Árbol final público izquierda, derecha;
public NonEmptyTree (K k, V v, Tree l, Tree r) {
clave = k;
valor = v;
izquierda = l;
derecha = r;
}
Árbol público copyOfTree () {
return new NonEmptyTree (clave, valor, left.copyOfTree (), right.copyOfTree ());
}
}