Cómo tomar un árbol general como entrada y crear un programa que lo convierta en un árbol binario y realice los tres recorridos

Había escrito lo siguiente en python:

#cree clase de árbol con raíz y tamaño de la misma
árbol de clase:
def __init __ (self):
self.root = None
self.numberOfNodes = 0

longitud def (auto):
return self.numberOfNodes

#create clase de nodo para manejar claves, valores, enlaces con izquierda y derecha
Nodo de clase:
def __init __ (self, k, v, l = Ninguno, r = Ninguno, p = Ninguno):
self.key = k
self.value = v
self.leftChild = l
self.rightChild = r
self.parent = p

def hasLeftChild (self):
return self.leftChild

def hasRightChild (self):
return self.rightChild

def getRoot (self):
volver self.root

def getLeftChild (self):
return self.leftChild

def getRightChild (self):
return self.rightChild

# método para insertar en el árbol cuando se proporciona la clave, se proporciona el valor
def insert (self, k, v):
if self.root: self.insertIntoExistingTree (k, v, self.root)
más: self.root = Node (k, v)
self.numberOfNodes + = 1

def insertIntoExistingTree (self, k, v, currentNode):
si k <currentNode.key:
if currentNode.hasLeftChild (): self.insertIntoExistingTree (k, v, currentNode.leftChild)
más: currentNode.leftChild = Node (k, v, p = currentNode)
más:
if currentNode.hasRightChild (): self.insertIntoExistingTree (k, v, currentNode.rightChild)
más: currentNode.rightChild = Node (k, v, p = currentNode)

#ordenar – proceder a la hoja más a la izquierda, raíz inmediata, derecha (recursivamente)
def inOrderTraversal (árbol):
si árbol:
inOrderTraversal (tree.getLeftChild ())
print (tree.getRoot ())
inOrderTraversal (tree.getRightChild ())

#preorder: avance a la hoja más a la izquierda (obteniendo la raíz en el # subárbol izquierdo), inmediatamente a la derecha, raíz (recursivamente)
def preOrderTraversal (árbol):
si árbol:
print (tree.getRoot ())
preOrderTraversal (tree.getLeftChild ())
preOrderTraversal (tree.getRightChild ())

#postorder: avance a la hoja más a la izquierda, atraviese a la izquierda de la derecha
# subárboles, luego raíz (recursivamente)
def postOrderTraversal (árbol):
si árbol:
postOrderTraversal (tree.getLeftChild ())
postOrderTraversal (tree.getRightChild ())
print (tree.getRoot ())

Suponiendo que conoce los conceptos básicos de cómo se construye BST y la lógica de los recorridos del árbol.

More Interesting

Si un generador de números aleatorios generara 1600 números del 1 al 16, ¿cuántos habría de cada número?

¿Qué tipo de trabajo haría un cosmólogo en el CERN?

¿Cuál es la forma más eficiente de recoger pelotas de tenis en una cancha?

¿Cuál es la diferencia entre Manhattan y las medidas de distancia euclidiana?

¿Por qué es mejor usar los elementos del marco de la colección que usar una matriz de objetos?

¿Las personas aprenden algoritmos antes de aprender JavaScript?

¿Cuál es el peor caso de complejidad temporal de BFS (cuando se busca un elemento), sin almacenar los estados visitados?

1,000 participantes toman un examen que consta de 100 preguntas y 5 opciones por pregunta. ¿Cuál es el mejor enfoque (algoritmo) para encontrar todos los pares posibles de participantes con al menos un 80% de coincidencia en las opciones que eligieron?

¿Cómo funcionan los algoritmos genéticos en la programación?

El tiempo supuestamente imaginario puede modelarse significativamente en física. Entonces, ¿puede existir una complejidad de tiempo imaginaria para un algoritmo?

¿Cuáles son algunos de los mejores libros sobre Estructura de datos y Algoritmo en Java para principiantes?

¿Por qué sigo fallando la introducción a los algoritmos en la escuela de posgrado?

¿Qué debo hacer si tengo dificultades con la programación dinámica en SPOJ?

¿Qué tan difícil es CS50x?

Cómo ordenar y combinar un conjunto de números en función de su aparición en múltiples arreglos de manera óptima