每日一练:LeeCode-404、左叶子之和【二叉树】

本文是力扣LeeCode-404、左叶子之和 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。

404、 左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:
每日一练:LeeCode-404、左叶子之和【二叉树】_第1张图片

输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

输入: root = [1]
输出: 0

提示:

节点数在 [1, 1000] 范围内
-1000 <= Node.val <= 1000

思路

⾸先要注意是判断左叶⼦不是⼆叉树左侧节点,所以不要上来想着层序遍历

左叶⼦明确定义节点A的左孩⼦不为空,且左孩⼦的左右孩⼦都为空(说明是叶⼦节点),那么A节点的左孩⼦为左叶⼦节点

直接判断当前节点是不是左叶⼦是不可能的,必须要通过节点的⽗节点来判断其左孩⼦是不是左叶⼦

递归法

本题采用后序遍历(左右中)是最好的,是因为要通过递归函数的返回值来累加求取左叶⼦数值之和

1、确定递归函数的参数和返回值

int sumOfLeftLeaves(TreeNode root)

2、确定终⽌条件
如果遍历到空节点,那么左叶⼦值⼀定是0

if(root==null)return 0;

3、确定单层递归的逻辑
遇到左叶⼦节点的时候,记录数值,然后通过递归求取左⼦树左叶⼦之和,和 右⼦树左叶⼦之和相加便是整个树的左叶⼦之和

        int leftSum = sumOfLeftLeaves(root.left);
        //当前节点的左节点不为空,且该左节点的左右节点为空,则为左叶⼦节点的情况
        if(root.left!=null&&root.left.left==null&&root.left.right==null){
            leftSum+=root.left.val;
        }
        int rightSum = sumOfLeftLeaves(root.right);
        int sum = leftSum+rightSum;
        return sum;

完整代码

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if(root==null)return 0;
        int leftSum = sumOfLeftLeaves(root.left);
        if(root.left!=null&&root.left.left==null&&root.left.right==null){
            leftSum+=root.left.val;
        }
        int rightSum = sumOfLeftLeaves(root.right);
        int sum = leftSum+rightSum;
        return sum;
    }
}

最重要的一句话:做二叉树的题目,首先需要确认的是遍历顺序
大佬们有更好的方法,请不吝赐教,谢谢

你可能感兴趣的:(#,每日一道LeeCode算法题,leetcode,数据结构,算法)