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

LeetCode 面试经典 150_二叉树_翻转二叉树(69_226_C++_简单)(DFS)

LeetCode 面试经典 150_二叉树_翻转二叉树(69_226_C++_简单)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(递归(后续遍历)):
      • 代码实现
        • 代码实现(思路一(递归(后续遍历))):
        • 以思路一为例进行调试

题目描述:

给你一棵二叉树的根节点 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

题解:

解题思路:

思路一(递归(后续遍历)):

1、我们思想就是交换一个结点的左右指针的指向,将其进行翻转。当我们进行后续遍历的时候,可以先记录每个结点左右指针指向,方便更改当前结点的左右指针的指向。

2、复杂度分析:
① 时间复杂度:O(N),其中 N 为二叉树节点的数目。我们会遍历二叉树中的每一个节点。
② 空间复杂度:O(N)。使用的空间由递归栈的深度决定,它等于当前节点在二叉树中的高度。在平均情况下,二叉树的高度与节点个数为对数关系,即 O(logN)。而在最坏情况下,树形成链状,空间复杂度为 O(N)。

代码实现

代码实现(思路一(递归(后续遍历))):
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root==nullptr) return nullptr;//记录左右孩子结点TreeNode *left=invertTree(root->left);TreeNode *right=invertTree(root->right);//交换左右孩子结点root->left=right;root->right=left;return root;}
};
以思路一为例进行调试
#include<iostream>
#include<vector>
#include<queue>
using namespace std;struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(int val):val(val),left(nullptr),right(nullptr){}TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};//通过数组创建二叉树,-1代表nullptr
TreeNode *createTree(vector<int> nums){if(nums.empty()) return nullptr;TreeNode *root=new TreeNode(nums[0]); queue <TreeNode *> q;q.push(root);int i=1;while(i<nums.size()){TreeNode *node=q.front();q.pop();if (i<nums.size()&&nums[i]!=-1){node->left=new TreeNode(nums[i]);q.push(node->left);}++i;if (i<nums.size()&&nums[i]!=-1){node->right=new TreeNode(nums[i]);q.push(node->right);}++i;}return root;
}//中序遍历(验证二叉树是否创建正确)
void inorder_print(TreeNode *root){if(root==nullptr) return ;inorder_print(root->left);cout<<root->val<<"  ";inorder_print(root->right);
}//翻转二叉树(后序遍历)
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root==nullptr) return nullptr;//记录左右孩子结点TreeNode *left=invertTree(root->left);TreeNode *right=invertTree(root->right);//交换左右孩子结点root->left=right;root->right=left;return root;}
};int main(){vector<int> nums={1,2,3,4,5,6,7};//创建二叉树TreeNode *root=createTree(nums);//中序遍历输出二叉树inorder_print(root);cout<<"\n";//翻转二叉树Solution s;TreeNode *ans= s.invertTree(root);//中序遍历输出翻转后的二叉树inorder_print(ans);return 0;
}

LeetCode 面试经典 150_二叉树_翻转二叉树(69_226)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

http://www.dtcms.com/a/581493.html

相关文章:

  • 【PLM实施专家宝典】离散制造企业ECO管理优化方案:构建自动化、零错误的变更引擎
  • go tool command
  • 网站流量如何做cms网站开发流程
  • HTML ASCII 编码解析与应用
  • Javascript函数之函数的参数以及默认参数?
  • LNMP部署及应用
  • 优质做网站哪家正规wordpress附件修复
  • Java-HTTP响应以及HTTPS(下)
  • [人工智能-大模型-135]:词向量的演进,对词向量的对Transformer架构理解的前提与关键。
  • 【1Panel】1、安装1Panel
  • JAVA:Spring Boot3 新特性解析的技术指南
  • 数据结构系列之十大排序算法
  • Spring Boot接收前端参数的注解总结
  • .c .o .a .elf .a2l hex map 这些后缀文件的互相之间的联系和作用
  • 纯静态网站seowordpress内页模板
  • 包装公司网站模板下载哈尔滨网络seo公司
  • 基于协同过滤算法的小说推荐系统_django+spider
  • VSCODE 插件 rust-analyzer 使用遇到的问题 快捷键查看定义
  • 个人网页设计制作网站模板西宁做网站制作的公司
  • Ubuntu24.10禁用该源...+vmware无法复制黏贴“天坑闭环”——从 DNS 诡异解析到 Ubuntu EOL 引发的 apt 404排除折腾记
  • npm i / npm install 卡死不动解决方法
  • 安装GPT4Free(也就是g4f)的最新版:g4f-6.5.7
  • h5四合一网站建设做新闻的网站怎样赚钱
  • SG-CAN-4G-410(4 路 CAN 转 4G 网关)
  • 潍坊做网站的做网站销售一个星期的计划
  • Spring三级缓存通俗易懂讲解
  • Windows10/Windows11家庭版系统关闭自动更新
  • 基于 Flink CDC 的 MySQL → Kafka Streaming ELT 实战
  • Redis内存回收,缓存问题
  • 一项基于高灵敏度sCMOS相机的光镊成像实验