day16 404. 左叶子之和257. 二叉树的所有路径110. 平衡二叉树

news/2025/2/7 2:05:01/文章来源:https://www.cnblogs.com/lin0304/p/18701943
  1. 左叶子之和(LeetCode 404)
    目标:计算给定二叉树中所有左叶子节点的值之和。
    思路:
    使用深度优先搜索(DFS)遍历二叉树。
    引入一个 flag 参数来标识当前节点是位于其父节点的左侧还是右侧。对于左叶子节点,flag 为 -1。
    在递归过程中,只有当当前节点是叶子节点(没有左右子节点)且位于其父节点的左侧时,才将其值累加到 sum 中。
    关键点:
    使用成员变量 sum 来记录所有左叶子节点的值之和。
    通过 flag 参数区分左叶子节点和右叶子节点。

//404. 左叶子之和
private int sum = 0;//成员变量,记录值
public int sumOfLeftLeaves(TreeNode root) {
//int sum = 0;
int flag=0;//用于记录方向,左是-1,右是1
if (rootnull)return sum;
if (root.left
null && root.rightnull)return sum;
dfs(root,0);//根节点不可能是左叶子结点,故此时flag的值不影响结果
return sum;
}
private void dfs(TreeNode root,int flag) {
if (root.left!=null){
dfs(root.left,-1);
}
if (root.right!=null){
dfs(root.right,1);
}
if (root.left
null && root.rightnull&&flag-1){
sum+=root.val;
}
}

  1. 二叉树的所有路径(LeetCode 257)
    目标:找出给定二叉树的所有从根节点到叶子节点的路径。
    思路:
    使用深度优先搜索(DFS)遍历二叉树。
    在递归过程中,将当前节点的值添加到路径列表 path 中。
    当到达叶子节点(没有左右子节点)时,将当前路径添加到结果列表 list 中。
    在回溯过程中,从 path 中移除当前节点的值。
    关键点:
    使用 path 列表记录当前路径的所有节点值。
    在到达叶子节点时,将路径转换为字符串并添加到结果列表中。
    //257. 二叉树的所有路径
    public List binaryTreePaths(TreeNode root) {
    List list = new ArrayList<>();
    List path=new LinkedList<>();
    if (root == null) return list;
    dfs(root, list, path);
    return list;
    }
    private void dfs(TreeNode root,List list,List path) {
    path.add(root.val);
    if (root.left!=null){
    dfs(root.left,list,path);
    }
    if (root.right!=null){
    dfs(root.right,list,path);
    }
    if (root.left == null && root.right == null) {
    StringBuilder sb = new StringBuilder();
    sb.append(path.get(0));
    for (int i = 1; i < path.size(); i++) {
    sb.append("->").append(path.get(i));
    }
    list.add(sb.toString());
    }
    path.remove(path.size()-1);
    }

  2. 平衡二叉树(LeetCode 110)
    目标:判断给定的二叉树是否是平衡二叉树。
    思路:
    定义一个辅助函数 getHeight 来计算以当前节点为根的子树的高度。
    在计算高度的过程中,检查子树是否平衡。如果任一子树不是平衡的(高度差大于 1),则返回 -1。
    如果所有子树都是平衡的,返回当前子树的高度。
    关键点:
    使用递归方法计算子树高度,并在递归过程中检查平衡性。
    通过比较左右子树的高度差来判断子树是否平衡。
    //给定一个二叉树,判断它是否是平衡二叉树
    public boolean isBalanced(TreeNode root) {
    return getHeight(root) != -1;
    }
    private int getHeight(TreeNode root) {
    if (root == null) {
    return 0;
    }
    int left = getHeight(root.left);
    int right = getHeight(root.right);
    if (right == -1|| left == -1) {
    return -1;
    }
    if (Math.abs(left - right) > 1) {
    return -1;
    }
    return Math.max(left, right) + 1;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879903.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Netty与前端请求进行交互实现实时通讯

引言因为不满足与一般的SpringBoot CRUD开发(太无聊了)所以去学一下网络编程,第一站就是通过B站老罗的EasyChat项目了解到了Netty这个网络框架,在学习这个项目之前也是去学习了一下Netty框架的使用以及相关的原理知识所以是有一定了解的,但是只是一味的学习不去实践总感觉是空中…

如何使用 Filebeat 8 连接 Easysearch

在日志场景,还是有很多小伙伴在使用 Filebeat 采集日志的。今天我来实战下使用 Filebeat 8 连接 Easysearch 。本次使用 Easysearch-1.9.0 版本和 Filebeat-8.17.0 版本做演示,也适用 Filebeat-oss-8.17.0 版本。 Easysearch 不开启兼容参数的情况 Easysearch 默认情况下未开…

25.2.7小记

异常捕捉 try{} catch{} import java.util.Scanner;public class ArrayIndex {public static void main(String[] args) {int [] a =new int[10];int idx;Scanner in = new Scanner(System.in);idx = in.nextInt();try{a[idx] = 10;System.out.println("hello");}cat…

《笨办法学Python3》PDF、EPUB免费下载

本书是一本Python入门书,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。本书是基于Python 3.6版本编…

RocketMQ实战—5.消息重复+乱序+延迟的处理

大纲 1.根据RocketMQ原理分析为什么会重复发优惠券 2.引入幂等性机制来保证数据不会重复 3.如何用死信队列处理优惠券系统数据库宕机 4.基于RocketMQ的订单库同步为什么会消息乱序 5.如何解决RocketMQ的消息乱序问题 6.RocketMQ的顺序消息机制的代码实现 7.基于RocketMQ的数据过…

VSCODE接入DeepSeek R1实现AI完成自动化脚本实战开发

大家好,我是六哥,今天还是我们喜爱的DeepSeek的玩法,今天来个实战案例,和大家分享一下如何将DeepSeek接入VS Code,结合AI Toolkit插件完成自动化脚本的实战开发。 一、准备 微软官方为我们提供了一个针对AI辅助的插件——AI Toolkit for Visual Studio Code。这个插件功能…

L0G2-Python 前置基础

L0G2-Python 前置基础 1. 任务一 Leetcode 383 通过的截图通过的代码 class Solution(object):def canConstruct(self, ransomNote, magazine):""":type ransomNote: str:type magazine: str:rtype: bool"""# 只使用 defaultdict(int) 避免 if 语…

L0G3-Git 基础知识

L0G3-Git 基础知识 1. 任务一 破冰活动之自我介绍 1.1 配置 git 直接采用全局设置的方式 git config --global user.name "sakuralggm" git config --global user.email "myemail@qq.com"查看全局配置 git config --global --list1.2 fork 项目1.3 克隆项目…

L0G4-玩转HF魔搭魔乐社区

L0G4-玩转HF/魔搭/魔乐社区 1. Hugging Face平台 1.1 任务一 模型下载 1.1.1 创建github codespace 访问github codespace,并使用Jupyter Notebook模板。创建完成后,进入“Create frome a template”页面对已经创建的codespace选择“open in visual studio code”点击后会经过…

2024 年度总结:与自己对话

搬运自洛谷博客,原发表时间:2024-12-27(实际写成:12-31)\[\mathsf{那跑过去的昼夜\ \ 是孤独的修炼\qquad——\ 林俊杰《黑夜问白天》} \] 孤独而不孤独.又来到写年度总结的时刻了。这一年无疑比去年更具故事的戏剧性与心境的跌宕起伏了。 被各种事件聚在一起搅和,高一上…

breach1靶机渗透学习

靶机下载 https://www.vulnhub.com/ 找Breach-1.0,不过这个是老靶机了,可以看网上其他博客附带有靶机下载的网盘链接,靶机官网访问很慢而且网站好像出问题了排版很乱,不打也罢。 readme.txt: First in a multi-part series, Breach 1.0 is meant to be beginner to interm…