038翻转二叉树

翻转二叉树

题目链接:https://leetcode.cn/problems/invert-binary-tree/description/?envType=study-plan-v2\&envId=top-100-liked

我的解答:

复制代码
public TreeNode invertTree(TreeNode root) {
    if(root==null){
        return null;
    }
    TreeNode temp=root.left;
    root.left=root.right;
    root.right=temp;
    invertTree(root.left);
    invertTree(root.right);
    return root;
}

分析:代码的时间复杂度为O(n),空间复杂度为O(n)。

看了官方题解后的解答:

复制代码
//官方题解的思路与我的解题思路相同
public TreeNode invertTree(TreeNode root) {
    if(root==null){
        return null;
    }
    TreeNode left = invertTree(root.left);
    TreeNode right = invertTree(root.right);
    root.left=right;
    root.right=left;
    return root;
}

分析:代码的时间复杂度为O(n),空间复杂度为O(n),使用的空间由递归栈的深度决定,它等于当前节点在二叉树中的高度。在平均情况下,二叉树的高度与节点个数为对数关系,即 O(logn)。而在最坏情况下,树形成链状,空间复杂度为 O(n)。

总结

  • 本题的本质还是二叉树的深度优先搜索(递归)。
相关推荐
爱吃苹果的日记本11 分钟前
数据结构第三课(时间复杂度)
数据结构·学习
Logic1012 小时前
C语言/数据动态规划题解:翻转一次子数组后的最大子数组和——四状态DP(O(n)时间O(1)空间)
c语言·数据结构·动态规划·时间复杂度·算法题·状态机dp·最大子数组和
小π军3 小时前
最大重叠区间数量
数据结构·算法
a187927218313 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记3 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Logic1013 小时前
C语言/数据结构字符串题解:找出DNA序列中未配对的独特序列——排序+遍历(O(nlogn))
c语言·数据结构·字符串·数组·排序·时间复杂度·算法题
Navigator_Z4 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
wzdark4 小时前
基于链表的内存池设计与内存复用机制4
java·数据结构·链表
6Hzlia5 小时前
【Classic 150 刷题计划】 LeetCode 26. 删除有序数组中的重复项 | C++ 快慢双指针经典模板
c++·算法·leetcode
土司大王6 小时前
LeetCode hot100——74.搜索二维矩阵:Java 二分模板
java·算法·leetcode