¿Cómo implementar una estructura de árbol en Java?
importar java.util.LinkedList
importar java.util.List
/**
* Función : Almacene los valores de la matriz en un árbol binario y luego recorralo de 3 maneras
*
* Referencia 0: Estructuras de datos (C) por Weimin Yan p>
*
* Referencia 1: /question/81938912.html
*
* Referencia 2: @date: 2011-5-17
*
*/
*/
clase pública BinTreeTraverse2 {
matriz int[] privada = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
Lista de nodos estática privada = null
/**
* Clase interna: nodo
*
* @author ocaicai@yeah.net @date: 2011-5-17
* p >
*/
clase estática privada Nodo {
Nodo hijo izquierdo
Nodo hijo derecho
int datos; /p>
p>
Nodo(int newData) {
leftChild = null
rightChild = null
datos = newData;
}
}
}
public void createBinTree() {
nodeList = new LinkedListlt;Nodegt ;();
p>
//Convierte el valor de la matriz al valor del nodo Nodo en secuencia
for (int nodeIndex = 0; nodeIndex lt; array.length; nodeIndex) {
nodeList .add(new Node(array[nodeIndex])); }
// Según la relación numérica entre el nodo padre y el nodo hijo, construya un árbol binario para el primer nodo padre lastParentIndex-1
for (int parentIndex = 0; parentIndex lt; array.
// Nodo secundario izquierdo
p>nodeList.get(parentIndex).leftChild = nodeList
.get(parentIndex * 2 1 );
// Nodo secundario derecho
nodeList.get(parentIndex).rightChild =
nodeList
.get(parentIndex * 2 2);
}
// Nodo secundario izquierdo
nodeList.get(parentIndex) .leftChild = nodeList
.get(parentIndex * 2 1
// Nodo secundario derecho
nodeList.get(parentIndex).rightChild = nodeList
.
}
// Último nodo principal: debido a que es posible que el último nodo principal no tenga un nodo secundario adecuado, debe procesarse por separado
int lastParentIndex = array .length / 2 - 1;
// Nodo secundario izquierdo
nodeList.get(lastParentIndex).leftChild = nodeList
.if array.length 2 == 1) {
nodeList.get(lastParentIndex).rightChild = nodeList
.
}
/ **
* Recorrido prioritario
*
* Tres estructuras transversales diferentes son iguales, solo que en diferentes órdenes
*
* @param node
* El nodo a atravesar
*/
public static void preOrderTraverse(Nodo nodo) {
p>
if (nodo == null)
return
System.out.print(node.data " "); /p>
preOrderTraverse( nodo.leftChild);
preOrderTraverse(nodo.rightChild
}
/****. p>
/**
* Recorrido intermedio
*
* Estas tres estructuras transversales diferentes son iguales, pero en diferentes órdenes
*
*
p>
* @param nodo
* El nodo a atravesar
* /
public static void inOrderTraverse(Nodo nodo) {
if (nodo == null)
return; (Nodo.leftChild);
System.out.print(nodo.data " "
inOrderTraverse(nodo. rightChild
} p>
/**
* Recorrido posterior al pedido
*
*
* Estas tres estructuras transversales diferentes son iguales, pero tienen diferentes prioridades
*
* @param node
* El nodo a atravesar
* nodo.
public static void postOrderTraverse(Nodo nodo) {
if (nodo == null)
return
postOrderTraverse( nodo. leftChild).
postOrderTraverse(node.rightChild);
System.out.print(node.data " "); >
public static void main(String[] args) {
BinTreeTraverse2 binTree = new BinTreeTraverse2()
binTree.createBinTree(); // El valor en el índice 0 en nodeList es el nodo raíz
Node root = nodeList.get(0);
System.out.println("Pre-OrderTraverse()"); );
Raíz del nodo = nodeList.get(0);
System.out.println("Pre-OrderTraverse()")println("Pre-Order Traverse:")
p>
preOrderTraverse(root);
System.out.println();
System.out.println("Orden medio recorrido:");
inOrderTraverse(root);
System.out.println();
System.out.println("Recorrido posterior al pedido :");
postOrderTraverse(raíz);
}
}
}