package com.fishercoder.solutions;

import com.fishercoder.common.classes.TreeNode;

import java.util.LinkedList;
import java.util.Queue;

public class _226 {

    public static class Solution1 {
        public TreeNode invertTree(TreeNode root) {
            if (root == null) {
                return root;
            }
            Queue<TreeNode> q = new LinkedList();
            q.offer(root);
            while (!q.isEmpty()) {
                TreeNode curr = q.poll();
                TreeNode temp = curr.left;
                curr.left = curr.right;
                curr.right = temp;
                if (curr.left != null) {
                    q.offer(curr.left);
                }
                if (curr.right != null) {
                    q.offer(curr.right);
                }
            }
            return root;
        }
    }

    public static class Solution2 {
        public TreeNode invertTree(TreeNode root) {
            if (root == null) {
                return root;
            }
            TreeNode temp = root.left;
            root.left = root.right;
            root.right = temp;
            invertTree(root.left);
            invertTree(root.right);
            return root;
        }
    }

    public static class Solution3 {
        //more concise version
        public TreeNode invertTree(TreeNode root) {
            if (root == null) {
                return root;
            }
            TreeNode temp = root.left;
            root.left = invertTree(root.right);
            root.right = invertTree(temp);
            return root;
        }
    }
}

@@ -195,24 +195,84 @@
 olution1 %7B%0D%0A
+        /**%0D%0A         * An iterative solution%0D%0A         */%0D%0A
         publ
@@ -332,32 +332,77 @@
 if (root == null
+ %7C%7C (root.left == null && root.right == null)
 ) %7B%0D%0A           
@@ -1014,24 +1014,83 @@
 olution2 %7B%0D%0A
+        /**%0D%0A         * A recursive solution%0D%0A         */%0D%0A
         publ
@@ -1150,32 +1150,77 @@
 if (root == null
+ %7C%7C (root.left == null && root.right == null)
 ) %7B%0D%0A           
@@ -1527,17 +1527,33 @@
        /
-/
+**%0D%0A         * A 
 more con
@@ -1562,24 +1562,37 @@
 se version%0D%0A
+         */%0D%0A
         publ
@@ -1656,24 +1656,69 @@
 root == null
+ %7C%7C (root.left == null && root.right == null)
 ) %7B%0D%0A       

refactor 226