题目描述:

方法1:前序遍历,只不过把读取数字改为交换左右孩子(递归)

class Solution {
public:
    void reverse(TreeNode* root){
        if(!root) return;
        swap(root->left,root->right);
        reverse(root->left);
        reverse(root->right);
    }

    TreeNode* invertTree(TreeNode* root) {
        reverse(root);
        return root;
    }
};

方法2:非递归

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        stack<TreeNode*> stk;
        if(!root) return root;
        stk.push(root);

        while(!stk.empty()){
            TreeNode* temp = stk.top();
            stk.pop();
            swap(temp->left,temp->right);
            if(temp->left) stk.push(temp->left);
            if(temp->right) stk.push(temp->right);
        }
        return root;
    }
};