public class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode() { } public TreeNode(int val) { this.val = val; } public TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } public static TreeNode generator(Integer[] arr) { if ((arr.length - 1) % 2 != 0) { System.out.println("is not a valid tree array!!!"); return null; } TreeNode res = new TreeNode(0, branch(1, arr), branch(2, arr)); return res; } private static TreeNode branch(int index, Integer[] arr) { if (index >= arr.length || arr[index] == null) return null; TreeNode left = index * 2 + 1 < arr.length ? branch(index * 2 + 1, arr) : null; TreeNode right = index * 2 + 2 < arr.length ? branch(index * 2 + 1 + 2, arr) : null; TreeNode res = new TreeNode(arr[index], left, right); return res; } public void print(TreeNode root) { } public void print(Integer[] root) { print(generator(root)); } public static int depth(TreeNode tree, int layer) { if (tree == null) return layer; return Math.max(depth(tree.left, layer + 1), depth(tree.right, layer + 1)); } }