¿Cómo puedo convertir una matriz de enteros en un BST? - en particular, ¿cómo puedo inicializar el BST y luego agregar nodos a esta raíz?

Me dan un array of integersy me gustaría convertirlo en un BST;

class BST: 
    def __init__(self,value): 
        self.right = None
        self.left = None
        self.value = value

    def insert(self, value):
        if value<self.value: 
            if not self.left: 
                self.left = BST(value)   
            else: 
                self.left.insert(value)   
        else: 
            if not self.right: 
                self.right = BST(value)  
            else: 
                self.right.insert(value)
        return self

array = [3,10,5,2,7,6,11] 

def insertArrayEntryIntoBst(array): 
    currentNode = BST()
    for i in range(len(array)):  
        currentNode.insert(array[i])

Retos que tengo:

  1. ¿Cómo puedo initialise the BST? - en el insert() function¿debo comenzar con una línea que diga if not currentNode: BST(array[0])?

  2. Después de inicializar, ¿mi código es correcto para insertArrayEntryIntoBst()? La idea es simplemente recorrer la matriz de entrada y dejar que la insert()función haga su magia.

  3. ¿Necesito un valueargumento en este caso? - ya que el valor entero en la matriz representará tanto el nodo como su valor? (que siempre será lo mismo)

Answer
  1. Puede construir el primer nodo fuera del bucle con el primer elemento de la matriz.

  2. Si necesita acceder al nodo. Así que también se puede devolver.

class BST: 
    def __init__(self,value): 
        self.right = None
        self.left = None
        self.value = value

    def insert(self, value):
        if value<self.value: 
            if not self.left: 
                self.left = BST(value)   
            else: 
                self.left.insert(value)   
        else: 
            if not self.right: 
                self.right = BST(value)  
            else: 
                self.right.insert(value)
        return self

def insertArrayEntryIntoBst(array):
    currentNode = BST(array[0])
    for i in range(1,len(array)): 
      currentNode.insert(array[i])
    return(currentNode)

array = [3,10,5,2,7,6,11] 

myNode=insertArrayEntryIntoBst(array)
print(myNode.value);
print(myNode.left.value);
print(myNode.right.value);