二叉树的镜像

题目

请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如下图所示,左图是原二叉树,而右图则是该二叉树的镜像

思路

  1. 先序遍历原二叉树的每个节点,如果遍历到的结点有子结点,就交换它的两个子结点。
  2. 递归遍历每个节点的子节点,同样,如果遍历到的子节点有子节点,就交换它的两个子节点。

  当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像

/**
 * 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 *tmp = root->left;
        root->left = root->right;
        root->right = tmp;
        if (root->left != nullptr) {
            mirrorTree(root->left);
        }

        if (root->right != nullptr) {
            mirrorTree(root->right);
        }
        return root;
    }
};

class Solution {
public:
    //后序
    void Mirror(TreeNode *root) {
        if(root==nullptr)
            return ;
        if(root->left==nullptr&&root->right==nullptr)
            return ;

        if(root->left)
            Mirror(root->left);
        if(root->right)
            Mirror(root->right);
        
        TreeNode *tmp=root->left;
        root->left=root->right;
        root->right=tmp;
        return ;
    }
};

 

posted on 2018-12-26 17:29  tianzeng  阅读(575)  评论(0编辑  收藏  举报

导航