Ошибка типа: __init __ () отсутствует 1 обязательный позиционный аргумент: 'значение' - PullRequest
0 голосов
/ 06 ноября 2019

Я знаю, что мне нужно, чтобы экземпляр TernaryTree () изначально был пустым до тех пор, пока он не будет создан методом generate_tree () с использованием значений из списка L. Пробовал различные методы, но не уверен, куда идти дальше. Что мне нужно добавить, чтобы получить значение для прохождения?

    class TernaryTree(object):
            def __init__(self, value):
                    self.value = value
                    self.left = None
                    self.right = None
                    self.mid = None

        def insert_node(self, new_value):
                if new_value <= self.value: #check if value is lower
                        if self.left == None: #if value is none
                                self.left = TernaryTree(new_value) #add in node value
                        else:
                                self.left.insert_node(new_value) #go left place node value
                elif new_value == self.value: #check if value is the same
                        if self.mid == None:
                                self.mid = TernaryTree(new_value)
                        else:
                                self.mid.insert_node(new_value)
                else: #case when new_value > self.value:
                        if self.right == None:
                                self.right = TernaryTree(new_value)
                        else:
                                self.right.insert_node(new_value)

        def traverse_LMRW(self):
                if self.left != None: #alternatively, if self.left: 
                         self.left.traverse_LMRW()  #go a level deeper
                if self.mid != None:
                        self.mid.traverse_LMRW()
                if self.right != None: #if node on right is not None!
                         self.right.traverse_LMRW() #go a level deeper
                print(self.value)

        def leaf_count(self):
                if self is None: 
                        return 0 
                if(self.left is None and self.right is None): 
                        return 1 
                else: 
                        return leaf_count(self.left) + leaf_count(self.right)


        def generate_tree(L):
                T = TernaryTree(L[0])  #first element in our list is the root by default
                for value in L[1:]:
                        T.insert_node(value)
                return T

def main():
    L = [4,1,2,2,3,1,0,4,6,5,6,4]
    T = TernaryTree()
    T.generate_tree(L)
    T.traverse_LMRW()
    T.leaf_count()
main()

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Вы получаете эту ошибку, потому что вы не передали value в ваш TernaryTree конструктор. Я думаю, здесь generate_tree как classmethod - это то, что вам действительно нужно.

0 голосов
/ 06 ноября 2019

Согласно вашему коду generate_tree не является методом экземпляра. Так сделайте отступ от отступа класса. И вызовите его как функцию python оттуда, он создаст экземпляр TernaryTree.

В основном вы создавали экземпляр TernaryTree без какого-либо начального значения, которое требуется в конструкторе __init__.

Код обновления будет:

class TernaryTree(object):
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
        self.mid = None

    def insert_node(self, new_value):
        if new_value <= self.value: #check if value is lower
            if self.left == None: #if value is none
                self.left = TernaryTree(new_value) #add in node value
            else:
                self.left.insert_node(new_value) #go left place node value
        elif new_value == self.value: #check if value is the same
            if self.mid == None:
                self.mid = TernaryTree(new_value)
            else:
                self.mid.insert_node(new_value)
        else: #case when new_value > self.value:
            if self.right == None:
                self.right = TernaryTree(new_value)
            else:
                self.right.insert_node(new_value)

    def traverse_LMRW(self):
        if self.left != None: #alternatively, if self.left: 
            self.left.traverse_LMRW()  #go a level deeper
        if self.mid != None:
            self.mid.traverse_LMRW()
        if self.right != None: #if node on right is not None!
            self.right.traverse_LMRW() #go a level deeper
        print(self.value)

    def leaf_count(self):
        if self is None: 
            return 0 
        if(self.left is None and self.right is None): 
            return 1 
        else: 
            return leaf_count(self.left) + leaf_count(self.right)


def generate_tree(L):
    T = TernaryTree(L[0])  #first element in our list is the root by default
    for value in L[1:]:
        T.insert_node(value)
    return T

def main():
    L = [4,1,2,2,3,1,0,4,6,5,6,4]
    T = generate_tree(L)
    T.traverse_LMRW()
    T.leaf_count()
main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...