题目难度:简单
考察内容:树,递归,三变量交换
题目简介:操作给定的二叉树,将其变换为源二叉树的镜像。
算法设计
关于树的题目大多和递归有关,这和树的结构有关,子树同样是一棵树,这种采用递归会使代码非常简洁,注意要考虑空树的情况
对于这题,实际上就是将左右子树交换
如何交换?
回想怎么交换两个数a,b,可以swap(a,b),可以用三变量交换法,c=a,a=b,b=c
同理,交换左右子树也可以采用三变量交换法
不同的是,交换的左右子树应该是交换后的,如图所示
图片说明
图片说明
图片说明

TreeNode *ch=Mirror(pRoot->right);//ch=右子树,这里等于的右子树需要也交换,所以要递归处理
            pRoot->right=Mirror(pRoot->left);//右子树=左子树,同上,也需要递归处理
            pRoot->left=ch;//左子树=ch=右子树

注意要考虑空子树

if(pRoot==NULL)return NULL;

整体代码如下

/**
 * 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 NULL;//树为空则返回
           TreeNode *ch=Mirror(pRoot->right);//ch=右子树,这里等于的右子树需要也交换,所以要递归处理
            pRoot->right=Mirror(pRoot->left);//右子树=左子树,同上,也需要递归处理
            pRoot->left=ch;//左子树=ch=右子树
        return pRoot;返回交换后的树
    }
};