public class TreeNode {
int val;
TreeNode left;
TreeNode right;
static TreeNode example1 = new TreeNode(
4,
new TreeNode(
2,
new TreeNode(1),
new TreeNode(3)
),
new TreeNode(
6,
new TreeNode(5),
new TreeNode(7)
)
);
TreeNode(int x) { val = x;}
TreeNode(int x, TreeNode l, TreeNode r) {val = x; left = l; right = r; }
static String serialize (TreeNode node) {
if (node == null)
return "[]";
StringBuilder sb = new StringBuilder ();
serialize_helper (node, sb, "");
return "[\n" + sb.toString () + "]";
}
static void serialize_helper (TreeNode node, StringBuilder sb, String indent) {
if (node == null)
return;
serialize_helper (node.left, sb, indent + " ");
sb.append (indent + node.val + "\n");
serialize_helper (node.right, sb, indent + " ");
}
public String toString () {
return serialize (this);
}
static TreeNode bfsBuild (int[] nums) {
if (nums.length == 0 || nums[0] == 10000_00007)
return null;
TreeNode root = new TreeNode (nums[0]);
int pos = 1;
Queue<TreeNode> queue = new LinkedList<> ();
queue.offer (root);
while (!queue.isEmpty ()) {
int size = queue.size ();
for (int i = 0; i < size; i++) {
TreeNode cur = queue.poll ();
if (pos >= nums.length)
break;
int left_num = nums[pos++];
cur.left = left_num != 10000_00007 ? new TreeNode (left_num) : null;
if (cur.left != null)
queue.offer (cur.left);
if (pos >= nums.length)
break;
int right_num = nums[pos++];
cur.right = right_num != 10000_00007 ? new TreeNode (right_num) : null;
if (cur.right != null)
queue.offer (cur.right);
}
}
return root;
}
public static void main (String[] args) {
System.out.println (serialize (example1));
System.out.println (serialize (bfsBuild (new int[] {1,2,3,4,5,6,7})));
System.out.println (serialize (bfsBuild (new int[] {1,2,3,4,5})));
System.out.println (serialize (bfsBuild (new int[] {1,2,3,4,10000_00007,10000_00007,5})));
System.out.println (serialize (bfsBuild (new int[] {1,2,3,4,5,10000_00007,7,6,10000_00007,10000_00007,9,10000_00007,8})));
System.out.println (serialize (bfsBuild (new int[] {-1, 0, 1})));
}
}