列表

详情


BM33. 二叉树的镜像

描述

作给定的二叉树,将其变换为源二叉树的镜像。
数据范围:二叉树的节点数 , 二叉树每个节点的值
要求: 空间复杂度 。本题也有原地操作,即空间复杂度 的解法,时间复杂度

比如:
源二叉树
镜像二叉树

示例1

输入:

{8,6,10,5,7,9,11}

输出:

{8,10,6,11,9,7,5}

说明:

如题面所示

示例2

输入:

{}

输出:

{}

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 312KB, 提交时间: 2021-09-15

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return TreeNode类
     */
    TreeNode* Mirror(TreeNode* pRoot) {
        if(!pRoot || (!pRoot->left && !pRoot->right)) return pRoot;
        else if(pRoot) swap(pRoot->left,pRoot->right);
         Mirror(pRoot->left);
         Mirror(pRoot->right);
        return pRoot;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2021-09-14

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @ param pRoot TreeNode类 
     * @ return TreeNode类
     */
    void mirror1(TreeNode* root)
    {//前序遍历-递归形式
        if(!root)
            return;
        TreeNode* temp=root->left;
        root->left =root->right;
        root->right=temp;
        mirror1(root->left);
        mirror1(root->right);
        return;
    }
    
    TreeNode* Mirror(TreeNode* root)
    {
        if (!root)
            return root;
        mirror1(root);
        return root;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 360KB, 提交时间: 2021-03-16

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return TreeNode类
     */
    TreeNode* Mirror(TreeNode* pRoot) {
        if(pRoot==nullptr) return NULL;
        TreeNode* tmp = pRoot->left;
        pRoot->left = Mirror(pRoot->right);
        pRoot->right = Mirror(tmp);
        return pRoot;
        // write code here
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2021-07-18

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return TreeNode类
     */
    TreeNode* Mirror(TreeNode* pRoot) {
        // write code here
        if(pRoot==NULL)return NULL;
        TreeNode *temp=pRoot->left;
        pRoot->left=pRoot->right;
        pRoot->right=temp;
        Mirror(pRoot->left);
        Mirror(pRoot->right);
        return pRoot;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2021-07-18

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return TreeNode类
     */
    TreeNode* Mirror(TreeNode* pRoot) {
        if(pRoot == NULL)
            return nullptr;
        
        
        TreeNode* temp;
        temp = pRoot->left;
        pRoot->left  = pRoot->right;
        pRoot->right  = temp;
        
        Mirror(pRoot->left);
        Mirror(pRoot->right);
        
        return pRoot;
    }
};

上一题