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

【基础算法精讲 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;}}
http://www.cnnetsun.cn/news/2997250.html

相关文章:

  • 【接口自动化测试】接口测试是什么
  • 按照这个方法真的领到了8元,超简单,实打实的,可点奶茶外卖.千问无门槛优惠券 大数据推给有需要的人,下载千问,输入口令:千问新用户专属876028,就可以领取啦
  • 大一下学期C++期末考试复试指南
  • MATLAB稳健性设计:从不确定性量化到可变性优化实战
  • MATLAB数据分箱实战:从原理到应用的全方位指南
  • 深入理解OWASP Top 10:从风险地图到实战防御体系构建
  • 绿联NAS+Clawdbot+飞书构建本地AI信息工作流
  • 教学辅助问答系统:基于SpringBoot+Vue的知识引擎设计
  • Wireshark抓包分析核心:OSI分层过滤与TCP三次握手精解
  • MPC8536E PCIe中断与eSPI接口配置详解:从原理到驱动实战
  • 未授权访问漏洞全解析:从原理到实战的24种场景与防御
  • Ubuntu部署OpenClaw避坑指南:环境校准与systemd服务配置
  • 基于FT232H的AT89C51/52单片机在线编程(ISP)与测试全攻略
  • 医疗知识图谱构建:COMED框架解析与应用实践
  • 本地部署Qwen 3.5实现Token自由:Ollama+LM Studio+OpenClaw全栈实践
  • MPC8309复位与时钟系统详解:从RCW配置到时钟树构建
  • Claude Code安装配置全链路指南:Node.js、npm与VS Code深度协同
  • MATLAB工具箱自动化初始化:从Steve Eddins脚本到现代项目管理实践
  • 从产品到服务:构建以用户价值为中心的软件工程思维
  • OpenClaw流式超时根因与三阶解决方案
  • Jetson Nano大模型实测:拆穿GPT-5.4幻觉,横评Haiku/GLM-4/DeepSeek
  • 物联网数据推送Twitter:ThingTweet代理方案与API集成实践
  • 从桌面混乱到高效文件交换:构建个人生产力系统的核心原则
  • SQL Server 2022安装卡在数据库引擎配置?64位Access驱动是关键前置条件
  • Vibe Coding:轻量级开发范式与手机端实时编码实践
  • Kimi K2.5生产级API接入:性能实测、成本陷阱与鲁棒性实践
  • 单调变化向量:从概念到算法优化与工程实践
  • CANN/ge LLM-DataDist Python接口参考
  • NCM加密音频格式解析与转换:从原理到批量处理实战
  • #### golang channel的结构 ####