Try   HackMD

Leetcode : 0226. Invert Binary Tree (Tree)

tags:leetcode

DFS normal method

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root==NULL)
            return root;
        else{
            invertTree(root->left); // add left depth
            invertTree(root->right); // add right depth
            swap(root->left, root->right); //swap it
            return root;
        }
    }
};

DFS(preorder traversal)

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root==NULL)
            return root;
        else{
            stack<TreeNode*>s; //FILO
            s.push(root);
            while(!s.empty()){
                TreeNode* tmp=s.top();
                s.pop();
                swap(tmp->left, tmp->right);
                if(tmp->left)
                    s.push(tmp->left);
                if(tmp->right)
                    s.push(tmp->right);
            }
        }
        return root;
    }
};

BFS method

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root == NULL){
            return root;
        } else {
            queue <TreeNode*> q; //FIFO
            q.push(root);
            while(!q.empty()){
                q.pop();
                swap(q->left,q->right);
                if(q->left) q.push(q->left);
                if(q->right) q.push(q->right);
            }
        }
        return root;
    }
};
//BFS time limited.
//this DFS better it.