时间复杂度是线性的,需要遍历每个节点。空间复杂度是线性的,最坏情况递归深度是线性的,即单链的情况。
- 本质是自底向上,递归到最底层,然后交换。
- 左子树更新为递归之后的右子树
- 右子树更新为递归之后的左子树
- 根始终保持不动
c
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if ( root == nullptr ) return nullptr;
TreeNode *left = invertTree( root->left );
TreeNode *right = invertTree( root->right );
root->left = right;
root->right = left;
return root;
}
};