空值签入 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.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
对于更 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
请注意,我没有对此进行测试,但您应该了解大致情况。
我刚开始学习 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.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
对于更 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
请注意,我没有对此进行测试,但您应该了解大致情况。