Cuando se trata de árboles binarios, hay varios tipos diferentes de recorridos que se pueden hacer recursivamente. Están escritos en el orden en que se mencionan y se visitan (L = niño izquierdo, V = visita ese nodo, R = niño derecho).
- Dentro de la orden de recorrido (LVR)
- Invertir orden de recorrido (RVL)
- Preordenes recorrido (VLR)
- orden posterior recorrido aparece su código (LRV)
que está realizando el método de cruce del postorder, pero estás confundiendo algunas cosas. Primero, el nodo es lo que desea recorrer; el datos es lo que desea visitar. En segundo lugar, no tiene ninguna razón para devolver el nodo en sí, de la forma en que esto se implementa. Su código no permite que una condición diga 'Estoy buscando datos en particular, ¿lo tiene Mr. Node @ 0xdeadbeef?', Que se encontraría con algún tipo de parámetro de búsqueda adicional.
Una travesía académica BST solo imprime los nodos. Si desea agregar una funcionalidad de búsqueda, es solo un parámetro más, así como una verificación adicional para el nodo correcto.
He aquí un fragmento:
// Academic
public void traverse (Node root){ // Each child of a tree is a root of its subtree.
if (root.left != null){
traverse (root.left);
}
System.out.println(root.data);
if (root.right != null){
traverse (root.right);
}
}
// Search with a valid node returned, assuming int
public Node traverse (Node root, int data){ // What data are you looking for again?
if(root.data == data) {
return root;
}
if (root.left != null){
return traverse (root.left, data);
}
if (root.right != null){
return traverse (root.right, data);
}
return null;
}
El método 'traverse' es para el uso de los elementos en su árbol binario pero se está volviendo la raíz izquierda, a la derecha de la raíz o de la raíz (incluso si la raíz es' null'!) La idea de las funciones recursivas es definir el caso base y luego el código repetitivo para obtener hasta ese caso base –
¿Qué tipo de cruce estás tratando de hacer? ¿es un 'BST'? ¿Necesita insertar un nodo en el lugar correcto en un 'BST'? – noMAD
Si recorre la izquierda, regresa como el último paso en la línea 4, nunca cruza a la derecha y nunca devuelve currentNode. Eso no se ve bien. –