📅  最后修改于: 2023-12-03 14:55:50.616000             🧑  作者: Mango
一个二叉树被称作 SumTree,当且仅当它满足以下条件:
例如,下面的二叉树是一个 SumTree:
10
/ \
8 2
/ \ / \
3 5 2 0
因为根节点的值是 10,等于其左子树 8 + 3 + 5 的值加上右子树 2 + 2 + 0 的值。
现在,我们就要来写一个函数,检查给定的二叉树是否为 SumTree。
我们可以采用递归的方式来解决这个问题。
首先,判断根节点的值是否等于左右子树节点值之和,如果是,则进一步判断左右子树是否也是 SumTree,如果不是,则说明这个二叉树不是 SumTree。
以下是Python代码,用于检查二叉树是否为 SumTree:
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def isSumTree(root):
if root is None:
return True
if root.left is None and root.right is None:
return True
if root.val != sumSubtree(root.left) + sumSubtree(root.right):
return False
return isSumTree(root.left) and isSumTree(root.right)
def sumSubtree(root):
if root is None:
return 0
if root.left is None and root.right is None:
return root.val
return root.val + sumSubtree(root.left) + sumSubtree(root.right)
我们来测试一下这个函数是否正确。
第一个测试用例,我们已经在前面的例子中给出:
root = Node(10)
root.left = Node(8)
root.right = Node(2)
root.left.left = Node(3)
root.left.right = Node(5)
root.right.left = Node(2)
root.right.right = Node(0)
assert isSumTree(root) == True
第二个测试用例,我们将左子树的值改为 7,这样它就不是 SumTree 了。
root.left.val = 7
assert isSumTree(root) == False
测试通过!