Надо напечатать все элементы бинарного дерева. Получаю ошибку "name "Alkio" is not defined. Подскажите пожалуйста, что не так?

Рейтинг: 1Ответов: 1Опубликовано: 21.02.2023
class Alkio:
    
    def __init__(self, arvo, vasen_lapsi:'Alkio' = None, oikea_lapsi:'Alkio' = None):
        self.arvo = arvo
        self.vasen_lapsi = vasen_lapsi
        self.oikea_lapsi = oikea_lapsi

    def alkioiden_summa(juuri: Alkio):
        summa = juuri.arvo
        if juuri.vasen_lapsi is not None:
            summa += alkioiden_summa(juuri.vasen_lapsi)
        if juuri.oikea_lapsi is not None:
            summa += alkioiden_summa(juuri.oikea_lapsi)
        return summa

if __name__ == "__main__":
    puu = Alkio(2)

    puu.vasen_lapsi = Alkio(3)
    puu.vasen_lapsi.vasen_lapsi = Alkio(5)
    puu.vasen_lapsi.oikea_lapsi = Alkio(8)

    puu.oikea_lapsi = Alkio(4)
    puu.oikea_lapsi.oikea_lapsi = Alkio(11)

    print(alkioiden_summa(puu))  ```     

Ответы

▲ 4Принят

Всё дело в том, что компилятор думает, что alkioiden_summa() это просто ФУНКЦИЯ и при попытке её найти возникает ошибка. Поэтому Вам нужно указывать, что это МЕТОД КЛАССА Alkio.

Вот так должно всё сработать:

class Alkio:

    def __init__(self, arvo, vasen_lapsi: 'Alkio' = None, oikea_lapsi: 'Alkio' = None):
        self.arvo = arvo
        self.vasen_lapsi = vasen_lapsi
        self.oikea_lapsi = oikea_lapsi

    def alkioiden_summa(self):
        summa = self.arvo
        if self.vasen_lapsi is not None:
            summa += Alkio.alkioiden_summa(self.vasen_lapsi)
        if self.oikea_lapsi is not None:
            summa += Alkio.alkioiden_summa(self.oikea_lapsi)
        return summa


if __name__ == "__main__":
    puu = Alkio(2)

    puu.vasen_lapsi = Alkio(3)
    puu.vasen_lapsi.vasen_lapsi = Alkio(5)
    puu.vasen_lapsi.oikea_lapsi = Alkio(8)

    puu.oikea_lapsi = Alkio(4)
    puu.oikea_lapsi.oikea_lapsi = Alkio(11)

    print(puu.alkioiden_summa())