二叉树part04 算法

二叉树part04

今日任务:

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

1.110.平衡二叉树

110. 平衡二叉树

/*** 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 boolean isBalanced(TreeNode root) {/**那么如何标记左右子树是否差值大于1呢?如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了。所以如果已经不是二叉平衡树了,可以返回-1 来标记已经不符合平衡树的规则了。*///一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。//思路:那不就是去求左右两颗子树分别的高度吗//如果高度不超过1,那么继续往下遍历去求//又到高度深度的概念了return getHeight(root)!=-1;}//递归遍历求高度public int getHeight(TreeNode root){if(root==null){return 0;}//还有没有其他的终止条件if(root.left==null&&root.right==null){return 1;}//定义左右子树的分别高度//分别看子树高度int leftHeight=getHeight(root.left);//要加上if(leftHeight==-1){return -1;}int rightHeight=getHeight(root.right);//要加上if(rightHeight==-1){return -1;//因为在函数体前面位置筛选不掉他们}//差值//绝对值int result=Math.abs(leftHeight-rightHeight);if(result>1){result=-1;}else{result=Math.max(leftHeight,rightHeight)+1;//不理解}return result;}
}

2.257. 二叉树的所有路径(递归回溯)

https://leetcode.cn/problems/binary-tree-paths/

/*** 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 List<String> binaryTreePaths(TreeNode root) {List<Integer> arr=new ArrayList<>();List<String> result=new ArrayList<>();// if(root==null)//不存在//返回所有从根节点到叶子节点的路径,那就是根节点到一直深度搜索//搜索到左右孩子都为空了search(root,arr,result);return result;}//将单条路径的节点值保存进数组里面,最后再合成字符串放进字符串集合里面public void search(TreeNode root,List<Integer> arr,List<String> result){//首先将根节点放进数组集合中arr.add(root.val);//终止条件是当root左右孩子都为空时(叶子节点))if(root.left==null&&root.right==null){//将该路径添加进集合//数组元素加进集合//定义一个字符串String s="";for(int i=0;i<arr.size();i++){s+=arr.get(i);//如果此时i是<length-1,那么就再添加->if(i<arr.size()-1){s+="->";}}//将字符串添加进集合中result.add(s);return;}if(root.left!=null){search(root.left,arr,result);//不要忘记回溯了arr.remove(arr.size()-1);}if(root.right!=null){search(root.right,arr,result);//不要忘记回溯了arr.remove(arr.size()-1);}}
}

3.404.左叶子之和

https://leetcode.cn/problems/sum-of-left-leaves/

要理解左叶子节点和叶子节点的区别

/*** 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) {return leftValSum(root);}public int leftValSum(TreeNode root){if(root==null){return 0;}//如何判断是左叶子//int leftVal=0;//我们不能这么做,因为这样子只能确定是叶子节点,不能确定是左叶子节点//左节点得是该节点是父节点的左孩子//叶子节点是左右孩子都是空的//遍历到叶子节点,返回现在的左节点值相加赋值给result// if(root.left==null&&root.right==null){//     result+=leftVal;// }//处理中间int midValue=0;//判断左叶子节点(在叶子节点的上一个节点)(同时符合是左节点和叶子节点)if(root.left!=null&&root.left.left==null&&root.left.right==null){midValue+=root.left.val;}//int leftVal=leftValSum(root.left);int rightValue=leftValSum(root.right);int sum=midValue+leftVal+rightValue;return sum;}
}

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

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

相关文章

Shell:常用命令之dirname与basename

一、介绍 1、dirname命令用于去除文件名中的非目录部分&#xff0c;删除最后一个“\”后面的路径&#xff0c;显示父目录。 语法&#xff1a;dirname [选项] 参数 2、basename命令用于打印目录或者文件的基本名称&#xff0c;显示最后的目录名或文件名。 语法&#xff1a;basen…

[蓝桥杯学习] 树链剖分

定义 将树分割成若干条链&#xff0c;以维护树上的信息&#xff0c;若无特殊需求&#xff0c;一般是重链剖分。 重链剖分 如何重链剖分 两个dfs 第一个dfs是预处理各个结点的基本信息&#xff0c;第二个dfs是利用信息进行剖分&#xff08;dfs序&#xff09; 操作步骤 第一…

git在本地创建dev分支并和远程的dev分支关联起来

文章目录 git在本地创建dev分支并和远程的dev分支关联起来1. 使用git命令2. 使用idea2.1 先删除上面建的本地分支dev2.2 通过idea建dev分支并和远程dev分支关联 3. 查看本地分支和远程分支的关系 git在本地创建dev分支并和远程的dev分支关联起来 1. 使用git命令 git checkout…

构建高效秒杀系统的设计原理及注意事项

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

设计模式——迭代器模式(Iterator Pattern)

概述 迭代器模式(Iterator Pattern)&#xff1a;提供一种方法来访问聚合对象&#xff0c;而不用暴露这个对象的内部表示&#xff0c;其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。 在软件开发中&#xff0c;我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有…

UG装配-沿线运动

如果希望图中圆柱销沿着槽运动&#xff0c;直接约束面是困难的&#xff0c;我们可以画出圆弧的中心线和圆柱销的中心点&#xff0c;约束点在线上&#xff0c;进行移动 需要注意的是&#xff0c;我们在零件中画点和线的时候&#xff0c;在装配体默认加载模型引用集的时候是无法显…

提供10个mysql的实例和思路

学生信息管理系统 学生表&#xff08;id, name, gender, age, class_id&#xff09;班级表&#xff08;id, name&#xff09;思路&#xff1a;通过学生表和班级表进行关联&#xff0c;可以实现学生信息的查询、添加、修改、删除等操作。 订单管理系统 订单表&#xff08;id, us…

最新ChatGPT网站源码,支持Midjourney绘画,GPT语音对话+GPT-4识图理解能力+ChatFile文档对话总结+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

基于 ESP32-C3 开启 Flash 加密和安全启动并进行 OTA 测试

软件&#xff1a; esp-idf v5.1.2 硬件&#xff1a; ESP32-C3 board 1. 首先&#xff0c;准备一个明文固件 hello-world.bin 基于 esp-idf-v5.1.2\examples\get-started\hello_world 例程&#xff0c;使用如下指令&#xff0c;直接编译&#xff0c;获取明文固件 hello-worl…

IDEA中自动导包及快捷键

导包设置及快捷键 设置&#xff1a;Setting->Editor->General->Auto import快捷键 设置&#xff1a;Setting->Editor->General->Auto import java区域有两个关键选项 Add unambiguous imports on the fly 快速添加明确的导包 IDEA将在我们书写代码的时候…

java 输出 lambda 生成的类

文章目录 启动添加参数 -Djdk.internal.lambda.dumpProxyClasses 就会在运行源码目录输出 class 文件 /*** <p>Copyright © qww 版权所有。</p>*/ package manageSystemOfStudentInfo;import java.io.File; import java.io.FileOutputStream; import java.io…

新版Edge卸载

新版Edge卸载&#xff1a;步骤与注意事项 随着Windows 10的发布&#xff0c;微软推出了新版Edge浏览器。虽然新版Edge浏览器具有许多优秀的新功能和改进&#xff0c;但有时您可能希望卸载它并使用其他浏览器。在本文中&#xff0c;我们将向您介绍如何卸载新版Edge浏览器&#…

wpsjs学习——获取单元格批注

1.获取第一个单元格的值&#xff1a; wps.Application.ActiveSheet.Range(A1).Value2; 2.1.获取第一个单元格的批注&#xff1a; wps.Application.ActiveSheet.Range(A1).Comment.Text(); <div class"global">获取表格信息<div class"divItem">…

厚积薄发11年,鸿蒙究竟有多可怕

​12月20日中国工程院等权威单位发布《2023年全球十大工程成就》。本次发布的2023全球十大工程成就包括“鸿蒙操作系统”在内。入围的“全球十大工程成就”&#xff0c;主要指过去五年由世界各国工程科技工作者合作或单独完成且实践验证有效的&#xff0c;并且已经产生全球影响…

C++中几个技巧(有点诡异的那种)

RAII 这个太多例子了&#xff0c;不细说 公开Base的内容 #include <iostream> using namespace std;struct Base {Base(){container;} protected:int container 0; };struct Derived:public Base {Derived(Base b):Base(b){}using Base::container; };int main() {Ba…

linux x86 setup_arch代码注释

个人理解加查的资料&#xff0c;不保证正确&#xff0c;有不对可以评论 // 查找个人电脑相关固件占用的地址&#xff08;来自bootparam中的handler&#xff09; olpc_ofw_detect(); // 将 early_idts 设置到 idt_table 并应用 lidt&#xff0c;包含 asm_exc_debug asm_exc_in…

Zernike多项式法生成相位理论推导及图像引导实现原理

目录 引言 波前传感器 ​编辑 关于相位计算问题补充 关于结构图的修正 光束质量评价指标 Zernike多项式 ​编辑Zernike多项式法生成相位 光强分布求波前相位-GS 更快的迭代方法SPGD 基于Zernike模式的SPGD 引言 我们还是先从第一篇文献开始理解展开今天分享的一些重…

并查集(C++)

目录 一、并查集的原理二、并查集的实现路径压缩 三、并查集的应用结尾 一、并查集的原理 并查集的两个功能&#xff1a; 合并&#xff1a;合并两个不想联系的元素查询&#xff1a;判断两个元素是否在同一个组内 主要解决的是元素分组的问题。 例如&#xff1a;某班级要创建…

数据迁移怎么测,都有哪些步骤?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;软件测试面试题分享&#xff1a; 1000道软件测试面试题及答案&#x1f4e2;软件测试实战项目分享&#xff1a; 纯接口项目-完…

gRPC - 分布式 gRPC 四种通信方式、三种代理方式(全代码演示)

目录 一、分布式 gRPC 开发 1.1、项目结构 & 前置说明 1.1.1、项目结构 1.1.2、protoc 必备依赖 1.1.3、推荐插件&#xff08;简化开发&#xff09; 1.1.4、protoc 生成 Java 代码说明 1.2、一元 RPC&#xff08;代理方式一&#xff1a;阻塞式 BlockingStub&#xff…