题目

题解

二叉树结构如下:

//Definition for a binary tree node.
    struct TreeNode {
        int val;
        TreeNode *left;
        TreeNode *right;
        TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };

1. 递归法

这个方法就是递归的翻转左右子树,若遇到空子树直接返回,然后当前节点的左子树变为翻转后的右子树,右子树变为翻转后的左子树,用tmp节点辅助。

  • 时间复杂度$O(n)$
  • 空间复杂度$O(n)$
class Solution {//两个方法。1.递归法
public:
    TreeNode* mirrorTree(TreeNode* root) {
        if(!root) return root;//为空直接返回
        auto tmp = root->left;
        root->left = mirrorTree(root->right);
        root->right = mirrorTree(tmp);//递归的翻转左右节点
        return root;
    }
};

2. 队列迭代法(层次遍历)

用层次遍历的顺序挨个翻转所有节点的左右子树

  • 时间复杂度$O(n)$
  • 空间复杂度$O(n)$
class Solution {//两个方法。2.队列迭代法
public:
    TreeNode* mirrorTree(TreeNode* root) {
        if(!root) return root;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
            auto cur = q.front(); q.pop();
            auto tmp = cur->left;
            cur->left = cur->right;
            cur->right = tmp;
            if(cur->left) q.push(cur->left);
            if(cur->right) q.push(cur->right);
        }
        return root;
    }
};