📜  门| GATE-CS-2017(套装1)|问题 12(1)

📅  最后修改于: 2023-12-03 15:12:44.198000             🧑  作者: Mango

GATE-CS-2017(套装1)-问题 12

本题要求实现一个函数,用于统计一个二叉树中每个节点的子节点个数之和。例如,对于下面这个二叉树:

     1
   /   \
  2     3
 / \   /
4   5 6

该函数应返回的结果为:10。

以下为函数的声明:

def sum_of_children(tree: TreeNode) -> int:
    pass

其中,TreeNode 表示二叉树的节点,它的定义如下:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

为了实现该函数,我们可以采用递归的方式。对于当前节点 node,其子节点个数之和为 sum_of_children(node.left) + sum_of_children(node.right) 加上它本身的子节点个数(即 1)。特殊地,如果 nodeNone,则子节点个数为 0。

完整的代码如下:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def sum_of_children(tree: TreeNode) -> int:
    if tree is None:
        return 0
    return sum_of_children(tree.left) + sum_of_children(tree.right) + 1

以上就是本题的解答,可以通过递归的方式来统计一个二叉树中每个节点的子节点个数之和。