力扣【二叉树专题】👊 404. 左叶子之和

316 阅读2分钟

「这是我参与2022首次更文挑战的第 15 天,活动详情查看:2022首次更文挑战

题目链接

404. 左叶子之和 - 力扣(LeetCode) (leetcode-cn.com)

题目描述

计算给定二叉树的所有左叶子之和。

测试用例

示例 1:

    3
   / \
  9  20
    /  \
   15   7

在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

题目分析

image.png

题目要求非常简单,只需要我们求出一颗二叉树上所有的左叶子节点的值之和,即上图中标记出的节点

我们需要先定位到题目要我们求和的节点具备的特征:

  1. 这种节点没有子节点
  2. 这种节点是其父节点的左子节点

那么,我们将目光聚焦到左叶子节点明显无法解决问题,我们需要判断出这种节点的父节点,如下图示

image.png

将条件转化后,会变为,这种父节点会有一个左子结点,且这个左子节点下不会有任何的子节点。当我们查找到这样的节点后,直接将这个节点的左子节点的值累加起来即可

大致的函数实现就是,遍历一个节点,在非空的情况下,判断他的左子节点不为空,并且左子节点为叶子节点的情况下,累加上这个节点的左子节点的值,然后以递归的模式,继续去遍历这个节点的左右子节点

代码实现

var sumOfLeftLeaves = function(root) {
    let sum = 0;
    trave(root);
    return sum;

    function trave(root) {
        if (root == null) return;
        trave(root.left);
        trave(root.right);
        if (root.left != null && root.left.left == null && root.left.right == null) {
            sum += root.left.val;
        }
    }
};

image.png

当我们捋清楚二叉树的结构以及递归的使用方式,就能很轻易的解决这题