https://leetcode.com/problems/invert-binary-tree/

트리를 반전 시킨다.

recursive

void Invert(TreeNode* node){
    if(node == NULL) return;
    TreeNode* tempNode;
    tempNode = node->left;
    node->left = node->right;
    node->right = tempNode;
    Invert(node->left);
    Invert(node->right);    
}

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root == NULL) return NULL;
        Invert(root);
        return root;
    }
};

iterative

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root == NULL) return NULL;
        stack<TreeNode*> treeStack;
        treeStack.push(root);
        
        while(!treeStack.empty()){
            TreeNode* curNode = treeStack.top();
            treeStack.pop();
            if(curNode == NULL) continue;
            TreeNode* tempNode;
            tempNode = curNode->left;
            curNode->left = curNode->right;
            curNode->right = tempNode;
            treeStack.push(curNode->left);
            treeStack.push(curNode->right);
        }
        
        return root;
    }
};