Печать дерева разбора: AttributeError: у объекта 'NoneType' нет атрибута 'data' - PullRequest
0 голосов
/ 20 апреля 2020

Класс должен сгенерировать дерево разбора на основе строки постфикса, а затем рекурсивно вызвать функцию печати на узле root, который будет печатать дерево разбора, но я продолжаю получать следующую ошибку: строка 15, в infixPrintNode self.right.infixPrintNode () AttributeError: у объекта 'NoneType' нет атрибута 'infixPrintNode'

Я новичок в python и считаю, что ошибка является экземпляром и я действительно запутался, был бы признателен за разъяснения

    import operator


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

    def __str__(self):
        return self.data

    def infixPrintNode(self):

        if self:
            if self.right:
                return self.right.infixPrintNode()
            print(self.data)
            if self.left:
                return self.left.infixPrintNode()






class ParseTree:

    def __init__(self, root = None):
        self.root = (root)
    def __str__(self):
         pass # to be implemented

    def fromPostfix(self, expression=""):

        s=[] #maintain parents


        for c in expression.split():
             if c in ["+", "-", "*", "/", "^", "#"]:
                 n=Node(c)

                 n.right = s.pop()
                 n.left=s.pop()
                 s.append(n)

             elif c.isnumeric() or c.isalpha() :
                  n=Node(c)
                  s.append(n)

             else:

                     raise ValueError("Invalid token! ")

        self.root = (s.pop())
        print(self.root.left.data)
        print(self.root.data)
        print(self.root.right.data)
        return self.root #or  Node(s.pop())


    def printinfix(self):


        if self.root:
            self.root.infixPrintNode()


t=ParseTree("x y +")
t.fromPostfix("x y +")
t.printinfix()

1 Ответ

0 голосов
/ 20 апреля 2020

вот оно:

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

вы только передали данные, поэтому слева и справа все еще нет.

 n=Node(c)

, поэтому вы получите:

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