Comience a escanear un árbol binario nivel por nivel y donde sea que encontremos una posición vacante, coloque un nuevo nodo allí.
Algoritmo:
Comience a escanear todos los niveles (nivel por nivel) de un árbol uno por uno hasta que encontremos un nodo cuyo nodo izquierdo o derecho sea nulo.
- Cómo implementar el algoritmo de aprendizaje de refuerzo para tareas de robótica, que incluye control y planificación de rutas
- ¿Cuál es el árbol más ancho de la India?
- ¿Cómo se puede predecir el rango basado en el rango anterior y los datos de puntaje disponibles?
- ¿Los desarrolladores de Google realmente usan conceptos como la notación O grande para determinar el tiempo de ejecución de un algoritmo en un proceso de codificación diario?
- 15 personas se sentarán en una fila de 15 sillas. ¿Cómo calculo cuántos planes de asientos se pueden hacer, donde dos planes de asientos se consideran iguales si dos planes comparten cuádruples adyacentes? o ¿Cómo puedo crear un algoritmo eficiente para encontrar límites inferiores para 15 o menos personas?
Para todos y cada uno de los nodos, ¿debemos verificar si existen los nodos izquierdo y derecho?
Si existe, entonces ese nodo no es útil para agregar un nuevo nodo, pero necesitamos almacenar el hijo izquierdo y derecho de ese nodo para su posterior procesamiento. se almacena en la cola para su colocación secuencial.
Si no existe, entonces encontramos un nodo, donde se colocará un nuevo nodo pero no está seguro a la izquierda o derecha, así que verifique qué hijo es nulo y coloque el nuevo nodo allí.
Vea la imagen de arriba para comprender mejor la posición de un nuevo Nodo para insertar.
Dado un árbol binario, necesitamos agregar un Nodo con el valor 8 marcado en líneas punteadas arriba en su posición correcta.
árbol de paquete;
import java.util.LinkedList;
import java.util.Queue;
clase pública AddNodeInBinaryTree {
Nodo privado rootNode;
public static void main (String [] args) {
nuevo AddNodeInBinaryTree ();
}
AddNodeInBinaryTree público () {
addNodeInBinaryTree (rootNode, 1);
addNodeInBinaryTree (rootNode, 2);
addNodeInBinaryTree (rootNode, 3);
addNodeInBinaryTree (rootNode, 4);
addNodeInBinaryTree (rootNode, 5);
printTreeLevelOrder (rootNode);
}
// Forma iterativa de agregar un nuevo nodo en el árbol binario.
privado void addNodeInBinaryTree (Node rootNode, int data) {
if (rootNode == null) {
// No hay nodos presentes, cree uno y asígnelo a rootNode
this.rootNode = nuevo nodo (datos);
}más{
// Nodos presentes, por lo que se verifica la posición vacante para agregar un nuevo nodo en forma secuencial
Queue q = new LinkedList ();
q.add (rootNode);
while (! q.isEmpty ()) {
Nodo nodo = q.poll ();
if (node.getLeft ()! = null && node.getRight ()! = null) {
q.add (node.getLeft ());
q.add (node.getRight ());
}más{
if (node.getLeft () == null) {
node.setLeft (nuevo nodo (datos));
}más{
node.setRight (nuevo nodo (datos));
}
rotura;
}
}
}
}
privado vacío printTreeLevelOrder (Node rootNode) {
if (rootNode == nulo)
regreso;
Queue q = new LinkedList ();
q.add (rootNode);
while (! q.isEmpty ()) {
Nodo nodo = q.poll ();
System.out.print (node.getData () + “”);
if (node.getLeft ()! = null)
q.add (node.getLeft ());
if (node.getRight ()! = null)
q.add (node.getRight ());
}
}
}
Explicación detallada: agregue un nodo en árbol binario y no un árbol de búsqueda binaria.