📌  相关文章
📜  一棵二叉树中所有带有偶祖父母的孩子节点的总和(1)

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

一棵二叉树中所有带有偶祖父母的孩子节点的总和

本题需要我们求出一棵二叉树中所有带有偶祖父母的孩子节点的总和。首先,我们可以将整个树进行遍历,判断每一个孩子节点的祖父节点是否为偶数。若是,累加该节点的值,最后得到所有带有偶祖父母的孩子节点的总和。

解决方法

采用递归遍历整个树,并记录每个节点的父节点和祖父节点,判断祖父节点是否为偶数。

def sum_even_grandparent(root) -> int:
    def dfs(node, parent, grandparent):
        if not node:
            return 0
        if grandparent and grandparent.val % 2 == 0:
            return node.val + dfs(node.left, node, parent) + dfs(node.right, node, parent)
        else:
            return dfs(node.left, node, parent) + dfs(node.right, node, parent)

    return dfs(root, None, None)
程序说明
  • 首先,定义了一个内部函数 dfs,该函数用于递归遍历树,并判断每个节点的祖父节点是否为偶数。
  • 接着,我们对每个节点进行判断,如果祖父节点存在且为偶数,那么累加该节点的值,并返回左右子节点。
  • 如果祖父节点不存在或不是偶数,则直接返回左右子节点。
  • 最终,调用 dfs 函数,传递根节点以及 None 和 None 代表的父节点和祖父节点,返回最终结果。
代码片段
def sum_even_grandparent(root) -> int:
    def dfs(node, parent, grandparent):
        if not node:
            return 0
        if grandparent and grandparent.val % 2 == 0:
            return node.val + dfs(node.left, node, parent) + dfs(node.right, node, parent)
        else:
            return dfs(node.left, node, parent) + dfs(node.right, node, parent)

    return dfs(root, None, None)

该程序可以在 LeetCode 上 AC,时间复杂度为 O(n),空间复杂度为 O(n)。