Entonces, esencialmente existe este problema : lo que estamos haciendo para invertir el árbol es
La solucion es
function invertTree(root) { const queue = [root]; while (queue.length) { const n = queue.pop(); if (n != null) { [n.left, n.right] = [n.right, n.left]; queue.push(n.left, n.right); } } return root; };Sin embargo, la parte que me confunde es que el cambio se hizo para poner en cola, no para rootear. ¿Por qué regresamos a la raíz al final? Parece que tenemos acceso directo a la referencia de la raíz inicial. Pensé que la raíz dentro de la cola es una copia de la raíz. esa es la parte que me confunde. ¿Por qué es una referencia y no una copia? ¿Es porque no hemos usado new Array()?
Si observa de cerca, el árbol se está invirtiendo en su ciclo while y la cola solo funciona como una estructura de datos de soporte ... es por eso que está devolviendo la raíz después de que se invierte el árbol
Como dice el problema, debe devolver la raíz. Pero antes de eso, tienes que invertirlo.
La lógica es mantener una matriz llamada queue que almacene el siguiente TreeNode que se invertirá y lo hace iterativamente dentro de un ciclo while.
En primer lugar, el algoritmo comienza con la cola llena con la raíz, por lo que const queue = [root] .
Luego, obtiene el último elemento de la cola (con .pop() ), y si no es un nodo nulo, llámelo n e invierta sus ramas izquierda y derecha haciendo: [n.left, n.right] = [n.right, n.left] . Este es el momento en el que hacemos cambios en la raíz .
Al sacarlo de la queue , tenemos acceso directo a la referencia del objeto root inicial, y cualquier cambio que hagamos en sus nodos lo afectará.
Más tarde, el algoritmo empuja a la queue los nodos izquierdo y derecho de root para invertirlos. Hace que el bucle vuelva a ejecutarse realizando la misma lógica en cada rama. Eventualmente, siempre apunta a un nodo que hace referencia a root , lo que explica por qué cambia indirectamente.
Deja de ejecutarse cuando la longitud de la cola es 0, que es cuando la cola ya no recibe más nodos, lo que significa que el árbol se invirtió correctamente.