题目
翻转一棵二叉树。
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
函数原型
C
的函数原型:
struct TreeNode* invertTree(struct TreeNode* root){}
边界判断
struct TreeNode* invertTree(struct TreeNode* root){
if( root == NULL )
return NULL;
}
算法设计:递归
看题目的意思,就是交换左边、右边,每个结点的左右子树都进行交换。
void swap(struct TreeNode* root){
struct TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
}
struct TreeNode* invertTree(struct TreeNode* root){
if( root == NULL )
return NULL;
invertTree( root->left );
invertTree( root->right );
swap( root ); // 交换 root->left root->right
return root;
}
- 时间复杂度: Θ ( n ) \Theta(n) Θ(n)
- 空间复杂度: Θ ( n ) \Theta(n) Θ(n)