当前位置: 首页 > 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.jsqmd.com/news/1071572/

相关文章:

  • 4芯全金属M12防爆连接器百科
  • 言语理解千题册电子版|言语理解1000题|言语理解专项训练题
  • NoSQL数据库介绍
  • 让 Agent 用自然语言生成 echarts 图表
  • 【课程设计/毕业设计】基于django的智能控糖食物管理系统的设计与实现【附源码、数据库、万字文档】
  • Flink状态后端:HashMap与RocksDB
  • 【Rust Lint 精讲:从 deny 到 forbid,一文搞定代码硬约束】
  • 【无人机路径规划】基于深度强化学习的多无人机移动边缘计算路径规划附matlab复现
  • 零基础入门 Codex:从聊天机器人到真正能执行任务的 AI Agent
  • Python+VSCode 网安开发环境双平台搭建实训讲义
  • AI编程一年后,我还记得怎么手写代码吗?答案让我沉默了
  • 学生视角下的技术探索:扫雷、Gitee、Qoder与微信小程序初体验总结
  • AI新时代下的图床管理方案-Cloudflare图床+MCP+Skills方案指南
  • 2026年TOP5广西花生油品牌:传统压榨工艺哪家强?
  • 单表五亿数据的查询优化 | Mysql、StarRocks
  • 最新mpay码支付系统源码+监听app完美可用改版
  • openclaw不存在?Ubuntu 22.04下安全替代方案指南
  • Etsy 把 1000 个 MySQL 分片迁进 Vitess:425TB 数据背后的真正问题不是性能,而是运维规模
  • VB6.0下载安装教程(附安装包)2026最新版(Visual Basic 6.0中文企业版)
  • 区间预测 | Matlab实现OOA-BP-KDE核密度估计多置信区间多变量回归区间预测
  • 【免费数据】2012和2020年中国1km分辨率POI密度栅格数据
  • 人工智能和大数据专业,填报时怎么区分取舍
  • 前端状态持久化
  • 按照这个方法真的领到了8元,超简单,实打实的,可点奶茶外卖.千问无门槛优惠券 大数据推给有需要的人,下载千问,输入口令:千问新用户专属876028,就可以领取啦
  • MATLAB稳健性设计:从不确定性量化到可变性优化实战
  • 大数据、计算机科学、软件工程三者该如何择校
  • 公考时政常识|公务员备考时政|每月时政热点汇总
  • 列车-轨道-桥梁交互仿真研究附Matlab代码
  • 华为MetaERP SAP FI-AA vs Oracle EBS FA:资产期间关闭可逆 / 不可逆 —— 设计哲学 + 底层实现逻辑完整对比一、核心现象先明确边界SAP FI-AA(资产会计)
  • 安全的即时通讯软件原理与设计的调研报告