📅  最后修改于: 2023-12-03 15:21:40.216000             🧑  作者: Mango
本文将介绍如何计算二叉树各层的节点值之和,并返回奇数级节点和与偶数级节点和之差。
我们可以使用递归的方式对二叉树进行遍历,统计各层节点的和。具体实现如下:
level
,表示当前节点所在的层数,初始值为1。level+1
,并返回左子树的总和 left_sum
。level+1
,并返回右子树的总和 right_sum
。odd_sum
中,将右子树的总和加入偶数节点和计数器 even_sum
中。even_sum
中,将右子树的总和加入奇数节点和计数器 odd_sum
中。left_sum
加上右子树总和 right_sum
加上当前节点值的总和,作为本次递归的返回值。class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def oddEvenDifference(root: TreeNode) -> int:
odd_sum = 0 # 奇数节点和计数器
even_sum = 0 # 偶数节点和计数器
def dfs(node: TreeNode, level: int) -> int:
if not node:
return 0
left_sum = dfs(node.left, level + 1)
right_sum = dfs(node.right, level + 1)
if level % 2 == 1:
odd_sum += left_sum
even_sum += right_sum
else:
even_sum += left_sum
odd_sum += right_sum
return left_sum + right_sum + node.val
dfs(root, 1)
return odd_sum - even_sum
# 构建一颗二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)
# 计算奇数级和与偶数级和的差
difference = oddEvenDifference(root)
print(f"The difference between odd level node sum and even level node sum is: {difference}")
# Output: The difference between odd level node sum and even level node sum is: -2
上述示例代码中,构建了一颗二叉树,并调用 oddEvenDifference
函数计算了奇数级节点和与偶数级节点和的差,最终输出了结果 -2
。
本文介绍了如何使用递归的方式对二叉树进行遍历,计算二叉树各个层的节点和,并返回奇数级节点和与偶数级节点和之差。通过实现这一算法,程序员可以更好地掌握二叉树遍历的技巧。