力扣(LeetCode)226. 翻转二叉树(C语言)

一、环境说明

  1. 本文是 LeetCode 226题 :翻转二叉树,使用c语言实现。
  2. 递归。
  3. 测试环境:Visual Studio 2019。

二、代码展示

struct TreeNode* invertTree(struct TreeNode* root){
    if(NULL==root){
        return NULL;
    }
    struct TreeNode *left = invertTree(root->left);
    struct TreeNode *right = invertTree(root->right);
    root->left = right;
    root->right = left;
    return root;
}

三、思路分析

  • 递归。
  1. 递归交换叶子结点
  2. 交换左右子树
  3. 遇到空结点,返回NULL
  • 写递归,可知,从后往前写代码

四、代码分析

  • 理解思路很重要!
  • 欢迎读者在评论区留言,作为日更博主,看到就会回复的。

五、AC

力扣(LeetCode)226. 翻转二叉树(C语言)_第1张图片

六、复杂度分析

  1. 时间复杂度: O ( n ) O(n) O(n) , n n n是树的结点个数,遍历树的时间复杂度是 O ( n ) O(n) O(n)
  2. 空间复杂度: O ( n ) O(n) O(n),递归的空间复杂度,取决于压栈次数,正常树形结构对应平均空间复杂度 O ( l o g n ) O(logn) O(logn)。当树变成类似一条链表,对应最坏空间复杂度 O ( n ) O(n) O(n)

你可能感兴趣的:(小白leetcode,leetcode,c语言,算法,递归,二叉树)