público TreeNode invertTree (raíz de TreeNode) {
if (root == null) return null; // línea 1
if (root.left! = null) {// línea 2
TreeNode leftchild = invertTree (root.left); // línea 3
leftchild .right = root; // línea 4
}
if (root.right! = null) {// línea 5
TreeNode rightchild = invertTree (root.right); // línea 6
rightchild.left = root; // línea 7
}
root.left = null; // línea 8
root.right = nulo; // línea 9
volver root; // línea 10
}
Considera la estructura
1
/ \
2 3
/ \ \
4 5 6
Si el nodo suministrado inicialmente es nulo, la línea 1 devolverá nulo.
Una vez que el control pasa la línea 1, la línea 2 determinará si el nodo ha salido del niño.
Para la estructura de árbol anterior, el nodo inicial suministrado será 1 (implica que estamos a través de la línea 1)
Como 1 ha salido del hijo, la línea 3 se ejecutará y la pila se verá como
2 (arriba)
1
Como tenemos un nodo (2) que no es nulo, pasamos por la línea 1
2 tiene un hijo izquierdo (4), por lo que estamos en la línea 3 y la pila ahora se ve como
4 (arriba)
2
1
Como tenemos un nodo (4) que no es nulo, pasamos por la línea 1
El nodo (4) no tiene hijo izquierdo o derecho, por lo que el método devuelve el nodo 4 en la línea 10.
pila parece
2 (arriba)
1
tenemos un resultado de la línea 3 (leftchild = 4)
la línea 4 asignará el nodo raíz actual (2) como el hijo derecho de 4.
NB: una vez que se invierte el árbol, los enlaces se invierten con la relación padre-hijo.
Nueva estructura se verá como
4 4
\
2
Pasando a la línea 5, tenemos nuestro nodo raíz actual como 2 con su hijo derecho como 5.
pila se ve a continuación una vez que estamos en la línea 6
5 (arriba)
2
1
Una vez más, el nodo (5) no tiene elementos secundarios, por lo que la línea 10 devolverá el nodo 5
la pila se ve a continuación con el resultado de la línea 6 (rightchild = 5)
2 (arriba)
1
la línea 7 asignará el nodo raíz actual (2) como el hijo izquierdo del nodo (5)
Nueva estructura se verá como
4 5
\ /
2
las líneas 8 y 9 borrarán los elementos secundarios del nodo (2).
la línea 10 devolverá el nodo raíz actual (2)
stack se ve a continuación con el resultado de la línea 3 (leftchild = 2). El nodo raíz actual es 1
1 (arriba)
la línea 4 asignará el nodo actual (1) como el hijo derecho del resultado (leftchild = 2) de la línea 3
Nueva estructura se verá como
4 5
\ /
2
\
1
Avanzando en la línea 5 (1 tiene el hijo derecho que 3) y luego avanzando a la línea 6
la pila se ve a continuación una vez que estamos en la línea 6
3 (arriba)
1
Como 3 no tiene un hijo izquierdo, la línea 2 falla. Pasando a la línea 5 y a la línea 6.
la pila se ve a continuación una vez que estamos en la línea 6
6 (arriba)
3
1
Como 6 no tiene elementos secundarios, se devuelve el nodo 6 y el
la pila se ve a continuación una vez que estamos en la línea 6 (rightchild = 6)
3 (arriba)
1
en la línea 7
Nueva estructura se verá como
4 5 6
\ / /
2 3
\
1
NB: ambas estructuras no están conectadas. el nodo (1) todavía tiene su hijo izquierdo apuntando a 2 y su hijo derecho apuntando
a 3. Esto se limpia en las líneas 8 y 9.
la línea 10 devuelve el nodo 3.
Volver a la línea 6 donde el nodo raíz actual 1.
la línea 7 asignará el nodo (1) como el hijo izquierdo del nodo 3.
Nueva estructura se verá como
4 5 6
\ / /
2 3
\ /
1
las líneas 8 y 9 borrarán los elementos secundarios del nodo (1) y devolverán el nodo 1.