反转二叉树
题目描述
- 题目:反转二叉树
- 难度:简单
- 题目描述:翻转一棵二叉树
- 示例一:
解题思路
递归交换每一个节点的左右子树,重点在于访问每一个节点,然后交换左右子树
参考源码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* invertTree(struct TreeNode* root){
if(root == NULL)
return NULL;
struct TreeNode* r = invertTree(root->right);
struct TreeNode* l = invertTree(root->left);
root->left = r;
root->right = l;
return root;
}
复杂度分析
- 时间复杂度:O(n),这里的n是节点的个数
由于至少要讲每一个节点都访问一次,才能将每一个节点的子树交换,所以没有比O(n)更好的算法了.
- 空间复杂度:O(n),这里的n是节点的个数
本方法使用了递归,在最坏的情况下栈内需要存放h个方法调用,h是树的高度,由于h最大取值为树的结点个数n,所以 h<=n ,即空间复杂度也为O(n).