📜  找到所有左叶节点的总和,它也有它的右兄弟节点(1)

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

找到所有左叶节点的总和,它也有它的右兄弟节点

这个题目需要我们找到二叉树中所有左叶节点的总和,同时这些左叶节点还必须有右兄弟节点。首先我们需要了解什么是左叶节点和右兄弟节点。

左叶节点指的是一个节点有左子树,但是其左子树没有左子树和右子树,即左子树只有一个节点。右兄弟节点指的是一个节点的右侧相邻节点,即它们在同一层且同一个父节点。

解题思路如下:

  1. 通过深度优先搜索遍历整棵二叉树;
  2. 找到左叶节点,同时判断其是否有右兄弟节点;
  3. 如果符合条件,则将该节点的值加入左叶节点总和中。

具体实现如下(使用Python语言):

class Solution:
    def sumOfLeftLeaves(self, root: TreeNode) -> int:
        def dfs(root: TreeNode, left: bool) -> int:
            if not root:
                return 0
            # 如果当前节点是左叶节点,并且有右兄弟节点,则将其值加入左叶节点总和中
            if left and not root.left and not root.right:
                return root.val
            # 递归遍历左右子树,并将结果累加到左叶节点总和中
            return dfs(root.left, True) + dfs(root.right, False)
        
        return dfs(root, False)

其中,dfs函数的两个参数分别代表当前节点和当前节点是否为左节点。在遍历每一个节点时,我们通过判断其是否为左叶节点并且是否有右兄弟节点,来确定是否将其值加入左叶节点总和中。

代码的时间复杂度为$O(n)$,其中$n$为二叉树中节点的总数,空间复杂度为$O(h)$,其中$h$为二叉树的高度。