Si solo desea almacenar la secuencia en orden del árbol binario, poblar una matriz secuencialmente durante el recorrido en orden es la mejor opción.
int [tamaño] matriz = nuevo int [tamaño]; int index = 0; void storeInOrder (raíz del nodo) { if (nodo == nulo) regreso; storeInOrder (root.leftChild ()); array [index ++] = root.value; storeInOrder (root.rightChild ()); }
Puede trabajar para devolver la matriz final.
Suponiendo que desea preservar la estructura de árbol, la respuesta más eficiente es almacenar los recorridos en orden y en orden del árbol en matrices separadas.
- Cómo resolver el problema de los módems (SPOJ.com - Problema EC_MODE) en SPOJ
- ¿De dónde obtienen los fondos de cobertura sus datos en tiempo real para algoritmos?
- ¿Qué significan términos como inicialización, evaluación, selección, cruce, mutación en el contexto de algoritmos genéticos?
- Cómo encontrar el número de subárboles izquierdo y derecho de un árbol binario
- ¿Cómo se distribuye el pagerank?
Dejame explicarte con un ejemplo:
En orden secuencia: DBEAFCG
Secuencia de pedido anticipado: ABDECFG
Si tiene ambos, puede recuperar la estructura de árbol como tal:
En la secuencia de preorden, el primer nodo es la raíz del árbol, es decir, A. Todos los nodos que quedan de A en la secuencia de orden están en el subárbol izquierdo de A (es decir, DBE) y el resto están en el subárbol derecho (es decir, FCG) .
Para cada uno de los subárboles así formados, formamos recursivamente la misma solución. Para el subárbol izquierdo, B es la raíz, ya que viene primero en la secuencia de preorden. D, que queda de B en la secuencia en orden será el hijo izquierdo de B y E será el hijo derecho.
Y así.