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

力扣第226翻转二叉数 c++三种方法 +注释

题目

226. 翻转二叉树

简单

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

示例 1:

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

示例 2:

输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100] 内
  • -100 <= Node.val <= 100

c++ 代码一 (递归法)

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (root == NULL) return root;  // 如果根节点为空,直接返回该节点,不进行翻转操作swap(root->left, root->right);  // 交换当前节点的左右子树,实现翻转操作invertTree(root->left);         // 递归地对当前节点的左子树进行翻转invertTree(root->right);        // 递归地对当前节点的右子树进行翻转return root;                    // 返回翻转后的根节点}
};

以上是代码中的注释,解释了每一行代码的作用。

  • 如果根节点为空,直接返回根节点,不进行翻转操作。
  • 交换当前节点的左右子树,实现翻转操作。
  • 递归地对当前节点的左子树进行翻转。
  • 递归地对当前节点的右子树进行翻转。
  • 返回翻转后的根节点。

c++ 代码二 (迭代法(前序遍历))

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (root == NULL) return root;  // 如果根节点为空,直接返回该节点,不进行翻转操作stack<TreeNode*> st;  // 创建一个栈,用于存储待翻转的节点st.push(root);        // 将根节点入栈while (!st.empty()) {TreeNode* node = st.top();  // 取出栈顶节点作为当前节点st.pop();swap(node->left, node->right);  // 交换当前节点的左右子树,实现翻转操作if (node->right) st.push(node->right);  // 如果当前节点的右子树不为空,则将右子树节点入栈,准备进行翻转操作if (node->left) st.push(node->left);    // 如果当前节点的左子树不为空,则将左子树节点入栈,准备进行翻转操作}return root;  // 返回翻转后的根节点}
};

以上是代码中的注释,解释了每一行代码的作用。

  • 如果根节点为空,直接返回根节点,不进行翻转操作。
  • 创建一个栈,用于存储待翻转的节点。
  • 将根节点入栈。
  • 使用迭代法进行翻转操作:
    • 取出栈顶节点作为当前节点。
    • 交换当前节点的左右子树,实现翻转操作。
    • 如果当前节点的右子树不为空,则将右子树节点入栈,准备进行翻转操作。
    • 如果当前节点的左子树不为空,则将左子树节点入栈,准备进行翻转操作。
  • 返回翻转后的根节点。

c++ 代码三 (广度优先遍历)

class Solution {
public:TreeNode* invertTree(TreeNode* root) {queue<TreeNode*> que;  // 创建一个队列,用于存储待翻转的节点if (root != NULL) que.push(root);  // 如果根节点不为空,则将根节点入队列while (!que.empty()) {  // 当队列不为空时循环执行操作int size = que.size();  // 获取当前队列的大小,即当前层的节点数for (int i = 0; i < size; i++) {  // 遍历当前层的节点TreeNode* node = que.front();  // 取出队首节点作为当前节点que.pop();  // 出队列swap(node->left, node->right);  // 交换当前节点的左右子树,实现翻转操作if (node->left) que.push(node->left);  // 如果当前节点的左子树不为空,则将左子树节点入队列,准备进行翻转操作if (node->right) que.push(node->right);  // 如果当前节点的右子树不为空,则将右子树节点入队列,准备进行翻转操作}}return root;  // 返回翻转后的根节点}
};

以上是代码中的注释,解释了每一行代码的作用。

  • 创建一个队列,用于存储待翻转的节点。
  • 如果根节点不为空,则将根节点入队列。
  • 使用迭代法进行翻转操作:
    • 获取当前队列的大小,即当前层的节点数。
    • 遍历当前层的节点:
      • 取出队首节点作为当前节点。
      • 交换当前节点的左右子树,实现翻转操作。
      • 如果当前节点的左子树不为空,则将左子树节点入队列,准备进行翻转操作。
      • 如果当前节点的右子树不为空,则将右子树节点入队列,准备进行翻转操作。
  • 返回翻转后的根节点。

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

http://www.lryc.cn/news/183263.html

相关文章:

  • React项目部署 - Nginx配置
  • 【Vue3】定义全局变量和全局函数
  • 【Pandas】Apply自定义行数
  • C#,数值计算——完全VEGAS编码的蒙特·卡洛计算方法与源程序
  • 纯css实现3D鼠标跟随倾斜
  • Pandas数据结构
  • systemverilog function的一点小case
  • 微服务的初步使用
  • 【2023年11月第四版教材】第18章《项目绩效域》(合集篇)
  • Android 11.0 mt6771新增分区功能实现三
  • 计算机网络——计算机网络的性能指标(上)-速率、带宽、吞吐量、时延
  • 每日一题 518零钱兑换2(完全背包)
  • Linux shell编程学习笔记8:使用字符串
  • 【Spring笔记03】Spring依赖注入各种数据类型
  • 2023计算机保研——双非上岸酒吧舞
  • 《计算机视觉中的多视图几何》笔记(13)
  • H5移动端购物商城系统源码 小型商城全新简洁风格全新UI 支持易支付接口
  • 全志ARM926 Melis2.0系统的开发指引⑤
  • 【AI视野·今日Robot 机器人论文速览 第四十七期】Wed, 4 Oct 2023
  • GPX可视化工具 GPX航迹预览工具
  • 学信息系统项目管理师第4版系列18_采购管理
  • 标准化数据模型
  • linux平台源码编译ffmpeg
  • Vue中如何进行拖拽与排序功能实现
  • 新款UI动态壁纸头像潮图小程序源码
  • Python逐日填补Excel中的日期并用0值填充缺失日期的数据
  • 【C语言经典100例题-70】求一个字符串的长度(指针)
  • 十天学完基础数据结构-第八天(哈希表(Hash Table))
  • flink集群部署
  • 2.证明 非单一点 Oct.2023