• [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. }

  • 相关阅读:
    健康系统练习
    Codeforces Round #835 (Div. 4) A. Medium Number
    uniapp 复制功能,ios复制不了,h5复制不了,部分浏览器无法复制
    Windows VSCode 安装C++ 一定可以的 详细版
    aisr接入指引
    【记录】Discuz!论坛防灌水防注册机,清理垃圾会员
    0014Java程序设计-springboot旅行景点推荐系统
    简述一下伪共享的概念以及如何避免
    Selenium爬取内容并存储至MySQL数据库
    leetcode刷题——排序和二分
  • 原文地址:https://blog.csdn.net/2303_77720864/article/details/138084397