📜  检查给定的二叉树是否为 SumTree(1)

📅  最后修改于: 2023-12-03 14:55:50.616000             🧑  作者: Mango

检查二叉树是否为SumTree

一个二叉树被称作 SumTree,当且仅当它满足以下条件:

  • 节点的值等于其所有子树的节点值之和。

例如,下面的二叉树是一个 SumTree:

        10
       /  \
      8    2
     / \  / \
    3  5 2   0

因为根节点的值是 10,等于其左子树 8 + 3 + 5 的值加上右子树 2 + 2 + 0 的值。

现在,我们就要来写一个函数,检查给定的二叉树是否为 SumTree。

思路

我们可以采用递归的方式来解决这个问题。

首先,判断根节点的值是否等于左右子树节点值之和,如果是,则进一步判断左右子树是否也是 SumTree,如果不是,则说明这个二叉树不是 SumTree。

Code

以下是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

测试通过!