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

时间:2021-03-11 17:54:57   收藏:0   阅读:0

问题

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

示例

技术图片

解答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;
    }
};
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!