Двоичное дерево поиска - метод вставки - Python - PullRequest
0 голосов
/ 22 марта 2020

Начиная с python здесь. Я пытаюсь создать метод вставки для двоичного дерева поиска. Когда я даю root целое число для начала, а не просто передаю себя. root = BinaryTreeNode (), метод вставки работает. Можете ли вы сказать мне, как я могу выполнить это sh без передачи целого числа? Спасибо!

class BinaryTreeNode:

    def __init__(self, data=None):
        self.data = data
        self.left = None
        self.right = None

    def __str__(self):
        return str(self.data)

class BinarySearchTree:

    def __init__(self, root = None):
        self.root = BinaryTreeNode()
        self.count = 0

    def __str__(self):
        return str(self.inOrder())


    # insert
    def insert(self, data):
        self.root = self.recursiveInsert(data, self.root)
        self.count+=1

    def recursiveInsert(self, data, node):
        if node is None:
            node = BinaryTreeNode(data)
        else:
            if data < node.data:
                if node.left is None:
                    node.left = data
                else:
                    self.recursiveInsert(data,node.right)
            else:
                if node.right is None:
                    node.right = data
                else:
                    self.recursiveInsert(data,node.left)

bst = BinarySearchTree()
bst.insert(5)

Я получаю ошибку:

in <module> bst.insert(5)
line 15, in insert self.root = self.recursiveInsert(data, self.root)
    if data < node.data:
TypeError: '<' not supported between instances of 'int' and 'NoneType'

1 Ответ

1 голос
/ 22 марта 2020

Проблема в том, что вы никогда не рассматриваете базовый вариант нового дерева. Добавьте этот средний пункт к вашей вставке:

    if node is None:
        node = BinaryTreeNode(data)
    elif node.data is None:
        node.data = data
    else:
        if data < node.data:
        ...
...