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

226以翻转二叉树来举例子讲清楚递归

很多时候拿到递归题看到代码不清楚这个代码该如何运行,是先执行哪句后执行哪句,这篇将以这个题目为例,将清楚递归中我不明白的地方。

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* invertTree(TreeNode* root) { if(root==NULL){ return nullptr; } TreeNode* left=invertTree(root->left); TreeNode* right=invertTree(root->right); root->left=right; root->right=left; return root; } };

首先,我们先处理头节点的左节点,也就是2。然后以2为头节点,处理2的左节点1,然后以1为头节点,发现他是空,所有我们返回NULL。然后继续来到我们的上一个头节点2,处理他的右节点也就是3,我们发现他也是空,所有我们也返回NULL。然后执行下面的代码交换1与3的位置。然后又继续返回到上一个头节点也就是4,我们现在要来处理他的右节点也就是7,用上述方法处理下去就可以了。

现在我们将代码这个递与归好好拆分成一块一块的代码。

先递到节点1: TreeNode* invertTree_1(TreeNode* root) { if (root == NULL) return nullptr; // 节点1不为空,跳过 // 左孩子为空,直接返回nullptr TreeNode* left = invertTree(root->left); // 右孩子为空,直接返回nullptr TreeNode* right = invertTree(root->right); // 交换左右孩子(都是空,无变化) root->left = right; root->right = left; return root; // 返回节点1 } 递到节点3: TreeNode* invertTree_3(TreeNode* root) { if (root == NULL) return nullptr; // 节点3不为空,跳过 TreeNode* left = invertTree(root->left); // 左空,返回nullptr TreeNode* right = invertTree(root->right); // 右空,返回nullptr root->left = right; root->right = left; return root; // 返回节点3 } 递到节点2: TreeNode* invertTree_2(TreeNode* root) { if (root == NULL) return nullptr; // 节点2不为空,跳过 // 递:递归翻转左子树(节点1),返回节点1 TreeNode* left = invertTree(root->left); // 递:递归翻转右子树(节点3),返回节点3 TreeNode* right = invertTree(root->right); // 归:交换左右孩子 root->left = right; // 左孩子变成节点3 root->right = left; // 右孩子变成节点1 return root; // 返回翻转后的节点2 }
http://www.jsqmd.com/news/454548/

相关文章:

  • 2026年优选工业自动化领域用超声波流量传感器品牌推荐 - 品牌2026
  • 代码注释谍战:商业机密隐藏手法
  • Python+tkinter编写眼力测试小游戏
  • AI辅助开发YOLOv8项目:从需求到部署的智慧农场病虫害检测系统构建指南
  • 基于TwelveLabs Marengo视频嵌入模型与Amazon Bedrock和ElasticSearch的AI辅助开发实战
  • 分期乐购物额度回收全攻略:避坑要点 + 靠谱变现方法,新手必看 - 团团收购物卡回收
  • 高阶辅助驾驶持续渗透,全球汽车CIS市场迎来量价齐升黄金期
  • Hive3.1.2安装避坑指南:从MySQL配置到远程模式实战(附常见报错解决方案)
  • AhMyth安卓远程控制实战:从环境搭建到渗透测试
  • 3月检查井厂商精选,这些品牌值得你拥有,预制混:凝土电力井/单篦雨水井/预制水泥管/预制检查井,井厂商口碑推荐 - 品牌推荐师
  • 从零开始:构建一个智能地图瓦片下载器的技术探索
  • 赋能开发工作流:用快马平台集成ai技能提升编码效率
  • 高洁净超纯水流量测量:2026年超声波流量传感器品牌推荐 - 品牌2026
  • MATLAB/Simulink仿真单相Boost型PFC电路:从理论到波形分析的完整指南
  • 掌握Dify工作流核心功能:从原理到实践的3大突破路径
  • AI 数学的秘密花园:12.残差连接为什么重要?(信息高速公路,堵车了还能绕道)
  • 2026垃圾压缩机安装服务优质推荐榜:移动一体式垃圾压缩机、三缸四柱直压式垃圾压缩机、垃圾压缩机安装选择指南 - 优质品牌商家
  • Flutter 三方库 ssl_cli 的鸿蒙化适配指南 - 自动化安全证书管理、助力鸿蒙端私有云联调与 HTTPS 极速配置
  • 无人机开发必看:MAVLink和MAVROS到底怎么选?附实际项目经验分享
  • 从“制造”到“服务”:这家企业的不锈钢多级泵,何以征服全球客户? - 品牌推荐大师1
  • 基于Python的“共享书角”图书借还管理系统毕业设计源码
  • 分期乐购物额度别再躺平了!亲测不踩坑的变现路子 - 团团收购物卡回收
  • 实测才敢推!8个AI论文工具测评:专科生毕业论文写作全攻略
  • 瑞祥商联卡回收全攻略:避坑 + 靠谱渠道,手把手教你秒变现金 - 团团收购物卡回收
  • psd2fgui 新手避坑指南:解决 PSD 转 fairygui 包的 3 个实战问题
  • 2026年3月四川水果基地 /柑橘批发/李子批发/枇杷批发/猕猴桃批发/产地水果批发/水果批发/水果供应链/中药材基地/石榴批发基地供应商竞争力格局深度分析报告 - 2026年企业推荐榜
  • 当前用户正在创作中
  • 研究生必看!用户挚爱的一键生成论文工具 —— 千笔·专业学术智能体
  • 发票批量查验软件(自动保存官网查验截图)91发票查验助手
  • 钉钉虚拟定位完全指南:从职场痛点到智能解决方案