Нулевой чек в python - PullRequest
       37

Нулевой чек в python

0 голосов
/ 18 марта 2020

Я новичок в изучении Python, и я писал функцию, которая возвращает сумму внуков узла (если они существуют) в двоичном дереве, и ему удалось создать только этот неаккуратный кусок кода.

Если у кого-нибудь есть какие-либо советы по улучшению краткости моей текущей функции в более Pythoni c, это было бы очень полезно.

    def value_of_grandchildren(self, root):
        sum = 0
        if root.left and root.left.left:
            sum += root.left.left.val
        if root.left and root.left.right:
            sum += root.left.right.val
        if root.right and root.right.left:
            sum += root.right.left.val
        if root.right and root.right.right:
            sum += root.right.right.val
        return sum

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Вы можете пропустить проверку два раза на наличие root.left и root.right

    def value_of_grandchildren(self, root):
        sum = 0
        if root.left:
            if root.left.left:
                sum += root.left.left.val
            if root.left.right:
                sum += root.left.right.val
        if root.right:
            if root.right.left:
                sum += root.right.left
            if root.right.right:
                sum += root.right.right.val
        return sum

Для более простого способа Pythoni c вы можете обобщить функцию для суммирования всех потомков n поколения root.

    def value_of_descendants(self, root, n):
        sums = 0
        if n == 0 and root:
            return root.val
        if root:
            sums += value_of_descendants(self, root.left, n-1)
            sums += value_of_descendants(self, root.right, n-1)
        return sums

Обратите внимание, что я не проверял это, но вы должны получить общее представление.

0 голосов
/ 18 марта 2020

Использование внутренней функции делает ее немного более читабельной.

def value_of_grandchildren(self, root):
    sum = 0
    def add(node):
        if not node:
            return
        if node.left:
            sum += node.left.val
        if node.right:
            sum += node.right.val
    add(root.left)
    add(root.right)
    return sum
...