news 2026/6/24 8:12:29

【基础算法精讲 10】如何灵活运用递归?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【基础算法精讲 10】如何灵活运用递归?

100. 相同的树

给你两棵二叉树的根节点pq,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

/** * 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; * } * } */classSolution{publicbooleanisSameTree(TreeNodep,TreeNodeq){//边界值:当前节点为空时,则返回falseif(p==null||q==null){returnp==q;//都为null,则返回true}//相同的树:当前节点的值相等,且左子树相等,右子树相等。returnp.val==q.val&&isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);}}

101. 对称二叉树

给你一个二叉树的根节点root, 检查它是否轴对称。

思路:在相同的树这段代码上改,判断左子树的左孩子是否等于右子树的右孩子,左子树的右孩子是否等于右子树的左孩子 代码:classSolution{publicbooleanisSameTree(TreeNodep,TreeNodeq){if(p==null||q==null){returnp==q;}returnp.val==q.val&&isSameTree(p.left,q.right)&&isSameTree(p.right,q.left);}publicbooleanisSymmetric(TreeNoderoot){//可以在相同的树代码逻辑上改//看左子树的左孩子是否等于右子树的右孩子,左子树的右孩子是否等于左子树的右孩子returnisSameTree(root.left,root.right);}}

110. 平衡二叉树

给定一个二叉树,判断它是否是平衡二叉树

思路: 用-1表示该树不是平衡二叉树,如果该树中某一个节点不是平衡节点,就立马返回-1,一直返回到调用入口,表示该树为非平衡二叉树。 代码:classSolution{//获得子树高度publicintgetDepth(TreeNodenode){if(node==null){return0;}//获取左子树高度intleft_height=getDepth(node.left);if(left_height==-1){return-1;}//获取右子树高度intright_height=getDepth(node.right);if(right_height==-1||Math.abs(left_height-right_height)>1){return-1;}returnMath.max(left_height,right_height)+1;}publicbooleanisBalanced(TreeNoderoot){//用-1记录该树为非平衡二叉树returngetDepth(root)!=-1;}}

199. 二叉树的右视图

给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:

输入:root = [1,2,3,null,5,null,4]

输出:[1,3,4]

解释:

思路:1、用一个全局数组ans,初始值为空。2、先遍历右子树,比较当前树的深度是否大于数组长度,若大于,则表示该节点是被第一次看见,需要记录到答案数组中。3、必须先遍历右子树,再遍历左子树 代码:classSolution{List<Integer>ans=newArrayList<>();publicvoiddepth(TreeNodenode,intdepth){if(node==null){return;}depth+=1;if(depth>ans.size()){ans.add(node.val);}//必须先遍历右子树depth(node.right,depth);depth(node.left,depth);}publicList<Integer>rightSideView(TreeNoderoot){//先遍历右子树//若答案的长度小于当前树的深度时,证明该节点是第一个能看到的结点,要把该节点记录到答案中。depth(root,0);returnans;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 8:10:35

【接口自动化测试】接口测试是什么

文章目录1. 接口的概念2. 接口测试2.1 概念2.2 接口组成3. 接口测试重要性4. 如何执行接口测试4.1 接口用例的编写4.2 结合业务逻辑来设计用例1. 接口的概念 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 程序内部的接口&#xff…

作者头像 李华
网站建设 2026/6/24 8:10:15

按照这个方法真的领到了8元,超简单,实打实的,可点奶茶外卖.千问无门槛优惠券 大数据推给有需要的人,下载千问,输入口令:千问新用户专属876028,就可以领取啦

这个是千问官方最新的活动&#xff0c;给新用户的最新福利&#xff0c;那就是必得8元通用叠加券 支付宝满减8元券&#xff0c;下载千问APP&#xff0c;发送“千问新用户专属876028”&#xff0c;就可以领取了&#xff0c;这个是官方口令&#xff0c;可以喝奶茶、喝星巴克、吃麦…

作者头像 李华
网站建设 2026/6/24 7:55:59

大一下学期C++期末考试复试指南

&#x1f3af; 复试概述与准备策略 1.1 复试考察重点 大一下学期C复试通常会更加注重实践能力和综合应用能力的考察&#xff0c;主要包括&#xff1a; 核心语法深入考察&#xff1a;类与对象、继承与多态、模板等 算法与数据结构&#xff1a;常见算法的C实现 程序调试能力&…

作者头像 李华
网站建设 2026/6/24 7:51:44

MATLAB稳健性设计:从不确定性量化到可变性优化实战

1. 从“固定设计”到“可变性设计”的思维跃迁在工程与科学计算的漫长实践中&#xff0c;我们早已习惯了“确定性”的思维方式。给定一组输入参数&#xff0c;运行一个模型或算法&#xff0c;得到一个确定的结果。无论是用MATLAB进行控制系统仿真&#xff0c;还是用其进行图像处…

作者头像 李华
网站建设 2026/6/24 7:51:01

MATLAB数据分箱实战:从原理到应用的全方位指南

1. 项目概述&#xff1a;数据分箱的核心价值与场景在数据分析、信号处理、机器学习乃至金融建模的日常工作中&#xff0c;我们常常会遇到一个看似简单却至关重要的预处理步骤&#xff1a;如何将连续、细粒度的原始数据&#xff0c;转化为离散、粗粒度的类别或区间&#xff1f;这…

作者头像 李华
网站建设 2026/6/24 7:48:40

深入理解OWASP Top 10:从风险地图到实战防御体系构建

1. 项目概述&#xff1a;为什么我们还在谈论OWASP Top 10&#xff1f; 干了这么多年安全&#xff0c;每次和开发、测试甚至产品经理聊起Web安全&#xff0c;我发现一个挺有意思的现象&#xff1a;大家或多或少都听过“OWASP Top 10”这个词&#xff0c;但真正能说清楚它是什么、…

作者头像 李华