Я пытаюсь реализовать метод вставки двоичного дерева с рекурсивными вызовами - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь реализовать метод вставки двоичного дерева с рекурсивными вызовами.Когда я запускаю функцию вставки, он дает мне AtributeError: экземпляр BinTree не имеет корневого атрибута.Можете ли вы сказать мне, пожалуйста, как я могу это исправить?

from random import randint
class Node:
    def __init__(self,value):
        self.value = value 
        self.left = None
        self.right = None

class BinTree:
    def __init___(self):
        self.root = None
    def insert(self, value):
        if self.root == None:
            self.root = Node(value)
        else:
            self._insert(value, self.root)
    def _insert(self, value, curr_node):
        if value < curr_node.value:
            if curr_node.left == None:
                curr_node.left = Node(value)
            else:
                self._insert(value, curr_node.left)
        elif value>curr_node.value:
            if curr_node.right == None:
                curr_node.right = Node(value)
            else:
                self._insert(value, curr_node.rigth)

        else:
            print('Node already exist!')
    def printTree(self):
        if self.root != None:
            self._printTree(self.root)
    def _printTree(self, curr_node):
        if curr_node !=None:
            self._printTree(curr_node.left)
            print(str(curr_node.val))
            self._printTree(curr_node.right)

def fillTree(tree):
    for _ in range(100):
        curr_elem = randint(0,50)
        tree.insert(curr_elem)
    return tree
tree = BinTree()
fillTree(tree)
tree.printTree()

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Ваш __init__ содержит опечатку в названии.Есть 3 заключительных подчеркивания.Измените его на:

...
class BinTree:
    def __init__(self):
        self.root = None

И ваш код должен работать

Редактировать: найдено еще несколько проблем.Вот полный фиксированный код:

from random import randint
class Node:
    def __init__(self,value):
        self.value = value
        self.left = None
        self.right = None

class BinTree:
    def __init__(self):
        self.root = None
    def insert(self, value):
        if self.root == None:
            self.root = Node(value)
        else:
            self._insert(value, self.root)
    def _insert(self, value, curr_node):
        if value < curr_node.value:
            if curr_node.left == None:
                curr_node.left = Node(value)
            else:
                self._insert(value, curr_node.left)
        elif value>curr_node.value:
            if curr_node.right == None:
                curr_node.right = Node(value)
            else:
                self._insert(value, curr_node.right)

        else:
            print('Node already exist!')
    def printTree(self):
        if self.root != None:
            self._printTree(self.root)
    def _printTree(self, curr_node):
        if curr_node !=None:
            self._printTree(curr_node.left)
            print(str(curr_node.value))
            self._printTree(curr_node.right)

def fillTree(tree):
    for _ in range(100):
        curr_elem = randint(0,50)
        tree.insert(curr_elem)
    return tree
tree = BinTree()
fillTree(tree)
tree.printTree()
0 голосов
/ 24 сентября 2019

Только BinTree с имеют root с;дети BinTree являются Node с, а не BinTree с и, следовательно, не имеют root с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...