Атрибут экземпляра отлаживается в python, и поскольку этот атрибут экземпляра пуст, если условие не работает должным образом? - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть проблема, связанная с проблемой значения экземпляра класса. Этот код ниже состоит из класса Binary Tree и некоторых методов поиска (Depth-First-Search), которые являются алгоритмами предварительного и порядкового порядка.

Код работает на 100%, проблема в том, что когда я отлаживаю функцию root.in_order (), печатаю b, a, c, но ожидаемые возвращаемые значения - d, b, a, e, c, f.

class Node:
    def __init__(self, value):
        self.value = value
        self.left_hand = None
        self.right_hand = None

    def insert_left(self,value):
        if self.left_hand == None:
            self.left_hand = Node(value)
        else:
            new_node = Node(value)
            new_node.left_hand = self.left_hand
            self.left_hand = new_node

    def insert_right(self,value):
        if self.right_hand == None:
            self.right_hand = Node(value)
        else:
            new_node = Node(value)
            will_be_loaded_right_child = self.right_hand
            self.right_hand = new_node
            new_node.right_hand = will_be_loaded_right_child

    def pre_order(self):
        print(self.value.value)
        print(repr(self.value))

        if self.left_hand:
            self.left_hand.pre_order()
        if self.right_hand:
            self.right_hand.pre_order()

    def in_order(self):

        if self.left_hand:
            self.left_hand.in_order()

        print(self.value)
        if self.right_hand:
            self.right_hand.in_order()

    def __str__(self):
        return "{}".format(self.value)

    def printAtt(self , arr = []):
        if arr.count>1:
            try:
                arr = [self.value, self.left_hand.value, self.right_hand.value]
                print(arr)
            except AttributeError:
                print("""There is nothing to show of the root |-> {} <-| 
                Node |-> {} <-| has not right or left handside value, 
                please continue to add or it 
                could be the last child:D""".format(self.value.value, self.value.value))


root = Node("a")
node_b = Node("b")
node_c = Node("c")
node_d = Node("d")
node_e = Node("e")
node_f = Node("f")

root.insert_left(node_b)
root.insert_right(node_c)

node_b.insert_right(node_d)

node_c.insert_left(node_e)
node_c.insert_right(node_f)

root.in_order()

1 Ответ

0 голосов
/ 30 апреля 2018

Просто измените последнюю часть скрипта, начиная с insert_left и insert_right ожидает значения.

Обновлена ​​версия следующим образом:

    class Node:
    def __init__(self, value):
        self.value = value
        self.left_hand = None
        self.right_hand = None

    def insert_left(self,value):
        if self.left_hand == None:
            self.left_hand = Node(value)
        else:
            new_node = Node(value)
            new_node.left_hand = self.left_hand
            self.left_hand = new_node

    def insert_right(self,value):
        if self.right_hand == None:
            self.right_hand = Node(value)
        else:
            new_node = Node(value)
            will_be_loaded_right_child = self.right_hand
            self.right_hand = new_node
            new_node.right_hand = will_be_loaded_right_child

    def pre_order(self):        
        print(self.value)        
        if self.left_hand:
            self.left_hand.pre_order()        
        if self.right_hand:
            self.right_hand.pre_order()

    def in_order(self):        
        if self.left_hand:
            self.left_hand.in_order()        
        print(self.value)
        if self.right_hand:
            self.right_hand.in_order()

    def post_order(self):       
        if self.left_hand:
            self.left_hand.post_order()
        if self.right_hand:
            self.right_hand.post_order()
        print(self.value)

root = Node("a")
root.insert_left("b")
root.insert_right("c")

node_b = root.left_hand
node_c = root.right_hand

node_b.insert_right("d")

node_c.insert_left("e")
node_c.insert_right("f")



root.in_order()
print("*"*30)
root.pre_order()
print("*"*30)
root.post_order()
...