Не удается вставить двоичное дерево поиска

#python #data-structures #binary-search-tree

#python #структуры данных #binary-search-tree

Вопрос:

Это хорошо работает, когда вставляется только значение в корень. Но когда дело доходит до вставки другого узла, он не может вставить, и единственное, что я получаю, это корневое значение. Вот код:

 class BinarySearchTree():
class BinarySearchTreeNode():
    def __init__(self,leftchildnode,rightchildnode,item):
        self.leftchildnode = leftchildnode
        self.rightchildnode = rightchildnode
        self.item = item

def __init__(self):
    self.root = None

def insert(self,item):
    if self.root == None:
        self.cur = self.BinarySearchTreeNode(None,None,item)
        self.root = self.cur
    else:
        self.recursiveinsert(self.root,item)

def recursiveinsert(self,node,item):
    if node is None:
        node = self.BinarySearchTreeNode(None,None,item)
    else:
        if item < node.item:
            self.recursiveinsert(node.leftchildnode,item)
        else:
            self.recursiveinsert(node.rightchildnode,item)

def inorderdisplay(self):
    self.recursive_inorder_display(self.root)
    
def recursive_inorder_display(self,BinarySearchTreeNode):
    if BinarySearchTreeNode != None:
        self.recursive_inorder_display(BinarySearchTreeNode.leftchildnode)
        print(BinarySearchTreeNode.item)
        self.recursive_inorder_display(BinarySearchTreeNode.rightchildnode)

tree = BinarySearchTree()
tree.insert(13)
tree.insert(2)
tree.insert(15)
tree.inorderdisplay()
  

Как только я запускаю inroder, единственный результат, который я получаю, равен 13, не могли бы вы указать, где ошибка?

Ответ №1:

  • Ваш оператор инициализации в классе BinaryTree должен быть изменен,

  • Вы должны передать левый и правый элементы, чтобы сделать это рекурсивным способом. Пожалуйста, попробуйте проверить это репозиторий github для получения дополнительной информации,

 #This should be changed to
    def __init__(self,leftchildnode,rightchildnode,item):
         self.leftchildnode = leftchildnode
         self.rightchildnode = rightchildnode
         self.item = item

#Please use this for the structure

    def __init__(self, item):
         self.leftchildNode = None
         self.rightchildNode = None
         self.item = item
  

Итак, вы можете проверить репозиторий github ниже для получения подробного кода

Пожалуйста, проверьте репозиторий github здесь для получения подробного кода