导读:本期聚焦于小伙伴创作的《C++如何实现简单的二叉树镜像反转?递归与迭代两种方案详解》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C++如何实现简单的二叉树镜像反转?递归与迭代两种方案详解》有用,将其分享出去将是对创作者最好的鼓励。

在C++中,二叉树镜像反转就是把每个节点的左子树和右子树互换位置。实现方式主要有递归和迭代两种,下面分别给出具体做法与代码示例。

C++如何实现简单的二叉树镜像反转?递归与迭代两种方案详解

一、二叉树节点定义

无论使用哪种方案,首先都需要定义二叉树的节点结构,代码如下:

// 二叉树节点定义
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

二、递归方案

递归的思路是:先递归反转左子树,再递归反转右子树,最后交换当前节点的左右指针。代码非常直观。

// 递归实现二叉树镜像反转
void mirrorRecursively(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    // 递归处理左右子树
    mirrorRecursively(root->left);
    mirrorRecursively(root->right);
    // 交换左右孩子
    TreeNode* temp = root->left;
    root->left = root->right;
    root->right = temp;
}

递归方案分析

  • 时间复杂度:每个节点访问一次,为 O(n)
  • 空间复杂度:递归调用栈深度取决于树高,最坏情况 O(n)

三、迭代方案

迭代通常使用队列进行层序遍历,每弹出一个节点就交换它的左右子树,再把非空的子节点入队。

#include <queue>

// 迭代实现二叉树镜像反转
void mirrorIteratively(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    std::queue<TreeNode*> q;
    q.push(root);
    while (!q.empty()) {
        TreeNode* node = q.front();
        q.pop();
        // 交换当前节点左右孩子
        TreeNode* temp = node->left;
        node->left = node->right;
        node->right = temp;
        // 子节点入队
        if (node->left != nullptr) {
            q.push(node->left);
        }
        if (node->right != nullptr) {
            q.push(node->right);
        }
    }
}

迭代方案分析

  • 时间复杂度:同样遍历所有节点,为 O(n)
  • 空间复杂度:队列最大长度接近树的最宽层,最坏 O(n)

四、两种方案如何选择

如果代码简洁性优先且树深度不大,递归写法更易读;若担心递归栈溢出或题目明确要求非递归,则使用迭代写法。两者本质都是遍历并交换,掌握后可灵活应对练习与面试。

注意:文中提到的 <queue> 是C++标准库头文件,实际编译时需包含对应引用。

C++二叉树镜像反转递归与迭代修改时间:2026-07-30 11:33:18

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。