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

[特殊字符] LeetCode 226. 翻转二叉树(C语言详解 | 递归 + 迭代)

📌 一、题目描述

给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。

示例:

输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]

🧠 二、核心思路

这道题本质非常简单,可以总结为一句话:

对于每一个节点,交换它的左右子树。

也就是说:

  • 当前节点:交换leftright

  • 左子树:继续翻转

  • 右子树:继续翻转

这天然符合递归结构(分治思想)


🔁 三、递归解法(推荐 ⭐)

✅ 解题步骤

  1. 递归终止:当前节点为空

  2. 交换左右子树

  3. 递归处理左右子树


💻 C语言代码

struct TreeNode* invertTree(struct TreeNode* root) { if (root == NULL) return NULL; // 交换左右子树 struct TreeNode* temp = root->left; root->left = root->right; root->right = temp; // 递归翻转左右子树 invertTree(root->left); invertTree(root->right); return root; }

🔍 四、递归过程图解

以示例[4,2,7,1,3,6,9]为例:

4 / \ 2 7 / \ / \ 1 3 6 9

第一步(根节点交换):

4 / \ 7 2

然后递归处理:

  • 节点 7 → 变成 9,6

  • 节点 2 → 变成 3,1

最终结果:

4 / \ 7 2 / \ / \ 9 6 3 1

🔄 五、递归另一种写法(后序思想)

也可以先递归,再交换:

struct TreeNode* invertTree(struct TreeNode* root) { if (root == NULL) return NULL; struct TreeNode* left = invertTree(root->left); struct TreeNode* right = invertTree(root->right); root->left = right; root->right = left; return root; }

📌 区别:

  • 第一种:前序交换

  • 第二种:后序交换

👉 本质完全一样


🚀 六、迭代解法(BFS 层序遍历)

如果不使用递归,可以用队列实现:

💻 C语言代码

#include <stdlib.h> struct TreeNode* invertTree(struct TreeNode* root) { if (!root) return NULL; struct TreeNode* queue[100]; int front = 0, rear = 0; queue[rear++] = root; while (front < rear) { struct TreeNode* node = queue[front++]; // 交换左右子树 struct TreeNode* temp = node->left; node->left = node->right; node->right = temp; if (node->left) queue[rear++] = node->left; if (node->right) queue[rear++] = node->right; } return root; }

⏱️ 七、复杂度分析

方法时间复杂度空间复杂度
递归O(n)O(h)
迭代O(n)O(n)
  • n:节点数

  • h:树高


🎯 八、面试考点总结

这题虽然简单,但考察的是:

✅ 二叉树递归基本功
✅ 指针操作(C语言重点)
✅ DFS / BFS 思维转换


💡 九、一句话总结

翻转二叉树 = 每个节点左右子树交换 + 递归处理子树


如果你在刷「面试经典 150 题」,这题其实是:

👉二叉树递归模板题(必须熟练到秒写)

http://www.jsqmd.com/news/518435/

相关文章:

  • YOLOv8鹰眼检测新手教程:从镜像启动到结果可视化全流程
  • 基于三电平逆变器SVPWM+PI控制策略的PMSM负载Matlab Simulink仿真研究
  • 终端AI新纪元:深度解析OpenCode,以及如何用OpenClaw+OpenCode打造全自动编程助手
  • 2026 大型企业财务数智化转型白皮书|推介总结
  • Kalman滤波:自由落体运动的追踪之道
  • DTS6012M dToF测距模块Arduino驱动详解
  • 【Tauri2】深入tauri-plugin-http:从基础请求到Channel通信的实战解析
  • 2024年装机指南:HDD和SSD怎么选?看完这篇不再纠结
  • QWEN-AUDIO在教育行业落地:AI助教语音合成+情感语调适配方案
  • IMU标定避坑指南:如何用imu_utils获取高精度噪声参数(附2小时数据采集技巧)
  • 老王-允许他人走弯路
  • TI高精度实验室-运算放大器-噪声分析与降噪实战指南
  • Harmonyos应用实例163:抛物线篮球投篮模拟
  • SqlSugar分页性能优化指南:ToPageList vs ToOffsetPage全解析
  • 老王-真正的清醒是知止知势
  • 定稿前必看!AI论文软件 千笔写作工具 VS 万方智搜AI,开源免费首选
  • 基于Endnote与GB/T 7714-2005的深度定制:一站式解决中英混排毕业论文的格式难题
  • 2026别错过!9个AI论文网站全场景通用测评,开题报告到毕业论文一键搞定
  • 老王-求快必死一个失败180次者的终极觉悟
  • 手把手教你用FineDataLink实现企业级数据对接:从配置到实战案例
  • Cornell抓取检测数据集深度解析:从PCD文件到RGB-D图像处理的完整指南
  • Code Llama实战指南:从安装到高效编程
  • 键盘事件的产生和传递
  • Harmonyos应用实例164:旋转作图工具
  • 看完就会:10个AI论文软件测评!毕业论文全流程必备工具推荐
  • 从零构建交互式2D画布:Qt图形视图框架(QGraphicsView/Scene/Item)实战解析
  • 老王-十条江湖铁律比读百本厚黑书更管用
  • 在 Ubuntu 上打造高颜值、高效率的 Zsh 终端环境(全中国网络优化版)
  • Harmonyos应用实例165:中心对称图案设计
  • 老王-语言是改变命运的咒语