Day28-代码随想录-平衡二叉树110+二叉树的所有路径257

news/2025/3/26 10:05:15/

平衡二叉树题目如下:

平衡二叉树的定义是左右子树的高度差不能大于1。看到这种类型的题,一般会想到用递归的方法来做,一旦用递归,就需要明确递归的三部曲。(1)递归函数的输入和返回值:输入-当前节点作为根节点,返回值肯定是高度;(2)递归终止条件:对于二叉树来说,一般递归的终止条件都是当前节点为空,返回0;(3)单层递归的逻辑:需要判断左右子树的高度差,如果已经大于1,说明不是平衡二叉树,直接返回-1;这样的话,还需要在得到左右子树的高度时,顺便判断一下之前的左右子树是否已经返回了-1,说明之前的子树已经不是平衡二叉树了,所以也就不需要后续的递归了,可以直接返回-1.代码如下:

class Solution {public boolean isBalanced(TreeNode root) {//使用递归法求根节点的左右子树的高度差//1.确定递归函数的输入和返回值:输入-将当前结点作为根节点,返回高度return getHeight(root) != -1;}public int getHeight(TreeNode root){//2.递归终止条件if(root == null) return 0;int leftHeight = getHeight(root.left);if(leftHeight == -1){return -1;//说明左子树里面早就不是平衡二叉树了}int rightHeight = getHeight(root.right);if(rightHeight == -1){return -1;//说明右子树里面早就不是平衡二叉树了}if(Math.abs(leftHeight-rightHeight)>1){return -1;//说明左右子树高度差大于1,不是平衡二叉树} return Math.max(leftHeight, rightHeight)+1;}
}

二叉树的所有路径题目如下:

思路:这里需要对二叉树进行遍历,前序遍历是最合适的,因为他能指向它的左右孩子。递归与回溯是相伴相生的,递归遍历的过程中,一旦遇到叶子结点,就要回溯,不然无法回到其他路径分叉点。在这里,递归的终止条件就不像之前那样遇到空节点返回0,这里是遇到叶子节点后对其进行处理(收获结果的过程)

class Solution {public List<String> binaryTreePaths(TreeNode root) {//存放最终结果字符串List<String> result = new ArrayList<>();if(root == null) return result;//存放结果中的路径,因为要回溯,所以是Integer类型List<Integer> paths = new ArrayList<>();//遍历树traversal(root, paths, result);return result;}public void traversal(TreeNode root, List<Integer> paths, List<String> result){//首先将根结点/中结点加进路径paths.add(root.val);//递归函数终止条件:当遇到叶子结点if(root.left == null && root.right == null){//定义一个容器进行结果处理StringBuffer sb = new StringBuffer();// StringBuilder用来拼接字符串,速度更快for(int i =0; i < paths.size()-1; i++){sb.append(paths.get(i)).append("->");}//加上叶子节点sb.append(paths.get(paths.size()-1));//将整个路径放入结果集中result.add(sb.toString());//注意要使用toString进行转换return;}//递归+回溯,两者相伴而生//递归和回溯是同时进行,所以要放在同一个花括号里if(root.left != null){traversal(root.left, paths, result);//回溯,返回节点的上一层paths.remove(paths.size()-1);}if(root.right != null){traversal(root.right, paths, result);//回溯,返回节点的上一层paths.remove(paths.size()-1);}}
}


http://www.ppmy.cn/news/1583192.html

相关文章

如何在IDEA中借助深度思考模型 QwQ 提高编码效率?

通义灵码上新模型选择功能&#xff0c;不仅引入了 DeepSeek 满血版 V3 和 R1 这两大 “新星”&#xff0c;Qwen2.5-Max 和 QWQ 也强势登场&#xff0c;正式加入通义灵码的 “豪华阵容”。开发者只需在通义灵码智能问答窗口的输入框中&#xff0c;单击模型选择的下拉菜单&#x…

基于深度学习的图片识别系统(下)

文章目录 前言1.任务描述2.模型搭建3.代码解释3.1模型加载3.2加载数据3.3模型权重的保存3.4学习率3.5过拟合3.6训练模型3.7调试检查 4.结果分析5. 完整代码结语 前言 书接上回&#xff0c;我们已经完成数据预处理部分的内容&#xff0c;后续仍需要对表格进行裁剪&#xff0c;此…

ADB介绍

ADB&#xff08;Android Debug Bridge&#xff09; 是 Android 开发工具包&#xff08;SDK&#xff09;中的一个命令行工具&#xff0c;用于在计算机和连接的 Android 设备&#xff08;或模拟器&#xff09;之间进行通信。它是开发者调试、测试和管理 Android 设备的重要工具。…

C#更新Nginx SSL证书

现在免费的SSL证书三个月就到期了&#xff0c;为了方便写了一个更新SSL证书的程序&#xff0c;把程序和xxx_nginx.zip的证书放在同一目录下&#xff0c;先解压ssl文件&#xff0c;然后上传到服务器&#xff0c;最后复制到nginx的路径下。一台服务器有多个ssl证书&#xff0c;最…

23种设计模式-备忘录(Memento)设计模式

备忘录设计模式 &#x1f6a9;什么是备忘录设计模式&#xff1f;&#x1f6a9;备忘录设计模式的特点&#x1f6a9;备忘录设计模式的结构&#x1f6a9;备忘录设计模式的优缺点&#x1f6a9;备忘录设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是…

JAVA EE_多线程-初阶(一)

1.认识线程 1.1概念 1&#xff09;线程是什么 线程是在进程内部中进行运行的&#xff0c;可以把它想成一个“执行流“&#xff0c;每个线程负责执行线程内的部分代码&#xff0c;多个线程之间可以”同时“执行多个代码。 “同时”&#xff1a;指并行&#xff0c;采用分时复用…

ngx_http_index_t

定义在 src\http\modules\ngx_http_index_module.c typedef struct {ngx_str_t name;ngx_array_t *lengths;ngx_array_t *values; } ngx_http_index_t; 该结构体用于 存储和解析 index 指令中单个索引文件的信息 &#xff0c;支持静态…

学习 - C++ 全栈聊天项目(1)架构概述和登录界面

开坑C 全栈聊天项目&#xff0c;项目地址C 全栈聊天项目(1)架构概述和登录界面 文章目录 C 全栈聊天项目(1)架构概述和登录界面 C 全栈聊天项目(1)架构概述和登录界面