【剑指Offer-27】二叉树的镜像

问题

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

示例

解答1:递归

class Solution {
public:
    TreeNode* mirrorTree(TreeNode* root) {
        if (!root) return nullptr;
        // ------ 前序操作
        swap(root->left, root->right);
        // ------
        mirrorTree(root->left);
        mirrorTree(root->right);
        return root;
    }
};

重点思路

本题只需要在遍历的过程中不断地交换左右节点即可。这道题可以用前序和后序的遍历方式。中序不行,因为中序是“左根右”的顺序,从根位置交换左右节点后,下一个遍历的是原来的左节点。

解答2:迭代

class Solution {
public:
    TreeNode* mirrorTree(TreeNode* root) {
        stack<TreeNode*> s;
        if (root) s.push(root);
        while (!s.empty()) {
            TreeNode* cur = s.top(); s.pop();
            // ------ 前序操作
            swap(cur->left, cur->right);
            // ------
            if (cur->right) s.push(cur->right);
            if (cur->left) s.push(cur->left);
        }
        return root;
    }
};
posted @ 2021-03-10 20:31  tmpUser  阅读(38)  评论(0编辑  收藏  举报