码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [LeetCode]—— 226——翻转二叉树


    1.题目 

    . - 力扣(LeetCode)

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

    2.解答

    一开始翻转第二层的,他们的子树跟着过去,相当于翻转下一层的一半,就像一个数组,我们对其进行二分翻转,第一次找到中间位置,把数组分为两个部分,然后翻转,之后把左右部分接着在里面分成两个部分,对应着左右子树,翻转,直至翻转到最后只有两个元素组成的部分,翻转结束

    2.代码实现分析

    函数的输入是一个指向根节点的指针,输出是翻转后的二叉树的根节点指针。

    首先,检查根节点是否为空。如果为空,直接返回根节点。

    然后,将根节点的左子树和右子树进行交换。这可以通过创建一个临时指针来完成,将左子树指针的值赋给它,然后将左子树指针指向右子树,再将右子树指针指向临时指针。

    接下来,递归地对左子树和右子树进行翻转。这样可以确保所有的子树都被翻转。

    最后,返回翻转后的根节点。

    该代码的时间复杂度是O(n),其中n是树中节点的个数。因为每个节点都被访问一次。

    总结:该代码使用递归的方式翻转了二叉树。递归的思想是先处理当前节点,然后递归地处理其左子树和右子树。通过不断交换左子树和右子树,最终完成翻转。

    3.代码实现:

    1.前序

    1. struct TreeNode* invertTree(struct TreeNode* root){
    2. if(root == NULL)
    3. return root;
    4. struct TreeNode* temp= root->left;;
    5. root->left = root->right;
    6. root->right = temp;
    7. invertTree(root->left);
    8. invertTree(root->right);
    9. return root;
    10. }

    2.后序

    1. struct TreeNode* invertTree(struct TreeNode* root){
    2. if(root == NULL)
    3. return root;
    4. invertTree(root->left);
    5. invertTree(root->right);
    6. struct TreeNode* temp= root->left;;
    7. root->left = root->right;
    8. root->right = temp;
    9. return root;
    10. }

    3.中序

    1. struct TreeNode* invertTree(struct TreeNode* root){
    2. if(root == NULL)
    3. return root;
    4. invertTree(root->left);
    5. struct TreeNode* temp= root->left;;
    6. root->left = root->right;
    7. root->right = temp;
    8. invertTree(root->left);
    9. return root;
    10. }

  • 相关阅读:
    拼多多API接入说明,Onebound数据
    【C++模拟实现】反向迭代器的实现
    R语言dplyr包基于嵌套的if_else语句对dataframe数据中的指定数据列进行编码处理
    交易用户如何去使用l2行情数据api接口?
    【LeetCode】234. 回文链表
    蓝桥杯每日一题20233.10.10
    SQL server发布订阅事务复制新增表的解决方案(不重新初始化)
    java实现给图片添加水印(文字水印或图片水印)
    手机LiDAR-based激光雷达标定板提高无人汽车智能化程度
    VBS脚本、BAT批处理脚本大公开,功能强大,简单易用 —— 定时执行专家
  • 原文地址:https://blog.csdn.net/2303_77720864/article/details/138084397
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号