Cómo implementar un árbol binario en Python

Puede implementar un nodo de árbol como una clase de Python con dos campos que hacen referencia a objetos de la misma clase. Estos serán nodos interiores del árbol. Luego, decida qué desea hacer con los nodos hoja. Podría usar la misma clase y dejar que un nodo hoja sea como un nodo interior pero con valores nulos (es decir, Ninguno en Python) para los elementos secundarios izquierdo y derecho. O bien, podría definir una clase diferente para representar nodos hoja. El primer enfoque es más sencillo si sus nodos interiores deben contener la misma información que sus nodos hoja. Este último es más apropiado si sus nodos hoja contienen información que no está presente en los nodos interiores.

La estructura de árbol de expresión en mi proyecto Calculadora simbólica de un curso introductorio es un árbol binario. Mire la parte inferior de la página de descripción del proyecto para encontrar un enlace al código fuente. Este es un poco más complicado que mi descripción anterior: los nodos de árbol están definidos por la clase “Expr”, y los diferentes tipos de nodos interiores y de hoja están definidos por las subclases de Expr. ConstExpr y VarExpr son los nodos hoja, y AddOpExpr, MulOpExpr y DivOpExpr (que son subclases de BinOpExpr) son los nodos interiores. (Este código es Python 3 y no se ejecutará en Python 2 sin modificación).

También puede definir un árbol binario de manera más simple utilizando la estructura de datos de lista incorporada de Python. Por ejemplo, [‘+’, [‘*’, 3, 4], 5] es una representación de árbol de 3 * 4 + 5.

Hay una implementación de Python de muestra de un árbol Splay en los archivos de inicio para esta Asignación de programación. Sin embargo, es una implementación ilustrativa y debe mejorarse de muchas maneras antes de usarla.

# Definir nodo de árbol binario
clase TreeNode (objeto):
def__init __ (auto, datos, izquierda, derecha):
self.data = data
self.left = left
self.right = right

# Definir árbol binario
clase BTree (objeto):
def__init __ (self, root = None):
self.root = root
# sus otros métodos
# def …

# Usando el árbol binario
nodea = TreeNode (5, Ninguno, Ninguno)
nodeb = TreeNode (6, Ninguno, Ninguno)
nodec = TreeNode (7, nodea, nodeb)
btree = BTree (nodoc)

SECO

$ pip install great-binary-tree-package-written-by-someone-else