《从头再来》剑指offer.27 二叉树的镜像

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

二叉树的问题,基本都靠递归来解决!

所以总体思路是:递归的交换每一个节点的左右子节点,当然后从根部向上交换。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* mirrorTree(TreeNode* root) {
        //思路:对于每一个节点都取得左右两个子节点的值,存下来,然后交换。
        //一定是每一个节点都交换!
        
        //递归终止条件,节点为空,返回空
        if(root == nullptr) return nullptr;
        //反转左右子树
        TreeNode* left =mirrorTree(root->left);
        TreeNode* right = mirrorTree(root->right);
        //用反转后的右子树代替左子树,反转后的左子树代替右子树
        root->left = right;
        root->right = left;

        return root;
    }
};

当然还有更简单的写法,借用swap函数,但是最好不要使用...

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* mirrorTree(TreeNode* root) {
        if(root == nullptr) return nullptr;
        mirrorTree(root->left);
        mirrorTree(root->right);
        swap(root->left,root->right);

        return root;
    }
};

《从头再来》

上一篇:LeetCode226|剑指Offer27.二叉树的镜像


下一篇:docker+efk+.net core部署