【LeetCode】404. 左叶子之和

算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。

题目描述

难度:【简单】 标签:【二叉树】

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

题目地址:https://leetcode-cn.com/problems/sum-of-left-leaves/

示例

    3
   / \
  9  20
    /  \
   15   7

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

解题

首先要明确这个叶子结点,遍历节点的时候需要判断这个节点是否为叶子节点。

这个需要一个辅助函数,通过判断该节点是否存在左右孩子节点来实现。

按照框架套路,考虑当前节点做的事情,然后把剩下的交给递归。

那么对当前节点来说,如果它的左孩子节点是一个叶子节点,那么就累加这个节点的值。

如果不是,则继续递归左右孩子,并相加最终的结果。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if (root == null) {
            return 0;
        }
        // 当前节点左孩子,如果是叶子节点,则进行累加。继续递归右孩子后的左节点
        if (isLeaf(root.left)) {
            return root.left.val + sumOfLeftLeaves(root.right);
        }
        return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
    }
    // 辅助函数,判断是否叶子节点
    private boolean isLeaf(TreeNode node) {
        if (node == null) {
            return false;
        }
        return node.left == null && node.right == null;
    }
}
posted @ 2021-12-01 23:12  把苹果咬哭的测试笔记  阅读(37)  评论(0编辑  收藏  举报