一、环境说明
- 本文是 LeetCode 226题 :翻转二叉树,使用c语言实现。
- 递归。
- 测试环境: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;
}
三、思路分析
- 递归交换叶子结点
- 交换左右子树
- 遇到空结点,返回NULL
四、代码分析
- 理解思路很重要!
- 欢迎读者在评论区留言,作为日更博主,看到就会回复的。
五、AC
六、复杂度分析
- 时间复杂度:
O
(
n
)
O(n)
O(n) ,
n
n
n是树的结点个数,遍历树的时间复杂度是
O
(
n
)
O(n)
O(n)。
- 空间复杂度:
O
(
n
)
O(n)
O(n),递归的空间复杂度,取决于压栈次数,正常树形结构对应平均空间复杂度
O
(
l
o
g
n
)
O(logn)
O(logn)。当树变成类似一条链表,对应最坏空间复杂度
O
(
n
)
O(n)
O(n)。