Как объявить функцию в классе, а не за пределами класса в Python - PullRequest
0 голосов
/ 16 октября 2018

Я довольно новичок в python и алгоритме и хочу объявить функцию внутри класса, а не вне его.Вот что у меня есть:

Общий класс дерева NAryTree Реализация:

class NAryTree:
    def __init__(self, key):
        self.key = key
        self.children = []
    def __str__(self):
        return str(self.key)
    def addChild(self, tree):
        self.children.append(tree)
    def getChild(self, k):
        return self.children[k]
    def getNChildren(self):
        return len(self.children)
    def __iter__(self):
        return self.children.__iter__()
    def __next__(self):
        return self.children.__next__()

Функция minSubtree(tree) для вычисления минимумасумма поддерева:

def minSubtree(tree):
    value = tree.key
    for child in tree:
        value += min(minSubtree(child), 0)
    return value

И функция дерева построения buildMyNAryTree():

def buildMyNAryTree():
    root = NAryTree(1)

    root.addChild(NAryTree(-2))
    root.addChild(NAryTree(3))
    root.addChild(NAryTree(4))

    root.getChild(0).addChild(NAryTree(-5))
    root.getChild(1).addChild(NAryTree(6))
    root.getChild(1).addChild(NAryTree(7))
    root.getChild(2).addChild(NAryTree(-8))

    root.getChild(0).getChild(0).addChild(NAryTree(-9))
    root.getChild(0).getChild(0).addChild(NAryTree(-10))
    root.getChild(0).getChild(0).addChild(NAryTree(11))
    root.getChild(1).getChild(0).addChild(NAryTree(-4))
    root.getChild(1).getChild(1).addChild(NAryTree(12))
    root.getChild(1).getChild(1).addChild(NAryTree(-13))
    root.getChild(2).getChild(0).addChild(NAryTree(14))
    return root

Я хочу объявить minSubtree(tree)внутри класса, однако я не знаю, как изменить параметр.Другими словами, я хочу вернуть минимальную сумму поддерева, используя buildMyNAyTree().minSubtree() вместо minSubtree(buildMyNAryTree()).

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Отступ для функции, находящейся внутри тела класса, и, по соглашению, переименуйте tree в self.Доступ child.minSubtree() вместо minSubtree(child).

class NAryTree:
    # your other methods
    def minSubtree(self):
        value = self.key
        for child in self:
            value += min(child.minSubtree(), 0)
        return value

print(buildMyNAryTree().minSubtree()) производит -32.

0 голосов
/ 16 октября 2018

Я думаю, что это должно делать то, что вы хотите:

Он перебирает дочерние элементы дерева и вызывает команду minSubTree дочернего элемента.

class NAryTree:
    def __init__(self, key):
        self.key = key
        self.children = []
    def __str__(self):
        return str(self.key)
    def addChild(self, tree):
        self.children.append(tree)
    def getChild(self, k):
        return self.children[k]
    def getNChildren(self):
        return len(self.children)
    def __iter__(self):
        return self.children.__iter__()
    def __next__(self):
        return self.children.__next__()

    def minSubtree(self):
        value = self.key
        for child in self.children:
            value += min(child.minSubtree(), 0)
        return value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...