当前位置: 首页 > news >正文

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

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

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

示例 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;}
}

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

相关文章:

  • IDEA:git 回滚本地提交-git 选择 Reset Current Branch to
  • 《区块链简易速速上手小册》第4章:区块链与加密货币(2024 最新版)
  • Vue2:请求接口的两种方式axios和vue-resource
  • 大模型重塑车载语音交互:赛道巨头如何引领新周期?
  • 力扣0114——二叉树展开为链表
  • Python爬虫请求库安装
  • Spring Cloud使用笔记
  • 判断一个字符串中出现次数最多的字符,统计这个次数?
  • C++——特殊类
  • Flink 添加 / 部署 Jar 包的若干注意事项
  • Python与CAD系列高级篇(二十五)分类提取坐标到excel(补充圆半径、线长度、圆弧)
  • ES6 模块化、CommonJS 模块化的区别经典面试题
  • 【网络协议测试】畸形数据包——圣诞树攻击(DOS攻击)
  • LeetCode--88
  • Vite+Electron快速构建一个VUE3桌面应用(二)——动态模块热重载
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Android Volley源码解析
  • co.js - 让异步代码同步化
  • git 常用命令
  • JDK9: 集成 Jshell 和 Maven 项目.
  • mysql常用命令汇总
  • passportjs 源码分析
  • Rancher-k8s加速安装文档
  • SpiderData 2019年2月23日 DApp数据排行榜
  • vue:响应原理
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 成为一名优秀的Developer的书单
  • ------- 计算机网络基础
  • 前嗅ForeSpider教程:创建模板
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 区块链分支循环
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • !!java web学习笔记(一到五)
  • #162 (Div. 2)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $.ajax()参数及用法
  • (C语言)fgets与fputs函数详解
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)fock函数详解
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)visual stdio 书签功能介绍
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)CentOS查看系统信息|CentOS查看命令
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。