空值签入 python

Null check in python

我刚开始学习 Python 并且正在编写一个函数 returns 二叉树中节点的孙子(如果它们存在)的总和并且只设法想出这个草率的一段代码。

如果有人有任何关于以更 pythonic 的方式改进我当前函数的简洁性的提示,我们将不胜感激。

    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

使用内部函数使其更具可读性。

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

您可以跳过两次检查是否存在 root.leftroot.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

对于更 Pythonic 的方式,您可以概括函数以对根的所有 n 代后代求和。

    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

请注意,我没有对此进行测试,但您应该了解大致情况。