题目描述

操作给定的二叉树,将其变换为源二叉树的镜像。

思路:

1.简单递归版(后序)

#include <iostream>
#include <vector>
using namespace std;

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
class Solution {
public:
    void Mirror(TreeNode *pRoot) {
        post(pRoot);
    }
    void post(TreeNode *t){
        if(t==NULL)
            return ;
        post(t->left);
        post(t->right);
        TreeNode *tempt = t->left;
        t->left = t->right;
        t->right = tempt;
    }
};

2.栈手动先序遍历(中序只需微调):
前/中序遍历:入栈指左,出栈指右,左父右祖(出)。

class Solution_vstack {
public:
    void swapChild(TreeNode *t){
        TreeNode *tempt = t->left;
        t->left = t->right;
        t->right = tempt;
    }
    void Mirror(TreeNode *pRoot) {
       vector<TreeNode *> v;
       TreeNode *t = pRoot;
       while(!(v.empty()&&t==NULL)){
           while(t != NULL){
               v.push_back(t);
               swapChild(t);
               t = t->left;
           }
           t = v[v.size()-1];
           v.pop_back();
           t = t->right;
       }
    }
};