package com.fishercoder.solutions;

import com.fishercoder.common.classes.TreeNode;

/**
 * 222. Count Complete Tree Nodes
 *
 * Given a complete binary tree, count the number of nodes.
 *
 * Definition of a complete binary tree from Wikipedia:
 * In a complete binary tree every level,
 * except possibly the last, is completely filled,
 * and all nodes in the last level are as far left as possible.
 * It can have between 1 and 2h nodes inclusive at the last level h.
 */
public class _222 {

    class SolutionRecursive {
        /**reference: https://discuss.leetcode.com/topic/21317/accepted-easy-understand-java-solution/2*/
        public int countNodes(TreeNode root) {
            int leftH = getLeftHeight(root);
            int rightH = getRightHeight(root);
            if (leftH == rightH) {
                return (1 << leftH) - 1;
            } else {
                return 1 + countNodes(root.left) + countNodes(root.right);
            }
        }

        private int getRightHeight(TreeNode root) {
            int height = 0;
            while (root != null) {
                root = root.right;
                height++;
            }
            return height;
        }

        private int getLeftHeight(TreeNode root) {
            int height = 0;
            while (root != null) {
                root = root.left;
                height++;
            }
            return height;
        }
    }

    public static void main(String...args) {
        System.out.println(1 << 3);
    }

    class SolutionIterative {
        /**TODO: implement an iterative solution*/
    }

}

@@ -116,19 +116,16 @@
 e Nodes%0A
- *%0A
  * Given
@@ -180,11 +180,8 @@
 es.%0A
- *%0A
  * D
@@ -483,24 +483,38 @@
 _222 %7B%0A%0A    
+public static 
 class Soluti
@@ -519,17 +519,9 @@
 tion
-Recursive
+1
  %7B%0A 
@@ -530,16 +530,28 @@
      /**
+%0A         * 
 referenc
@@ -634,16 +634,26 @@
 lution/2
+%0A         
 */%0A     
@@ -1447,182 +1447,6 @@
  %7D%0A%0A
-    public static void main(String...args) %7B%0A        System.out.println(1 %3C%3C 3);%0A    %7D%0A%0A    class SolutionIterative %7B%0A        /**TODO: implement an iterative solution*/%0A    %7D%0A%0A
 %7D%0A

refactor 222