public class TreeLinkNode {
int val;
TreeLinkNode left;
TreeLinkNode right;
TreeLinkNode next;
static TreeLinkNode example1 = new TreeLinkNode(
4,
new TreeLinkNode(
2,
new TreeLinkNode(1),
new TreeLinkNode(3)
),
new TreeLinkNode(
6,
new TreeLinkNode(5),
new TreeLinkNode(7)
)
);
TreeLinkNode(int x) { val = x;}
TreeLinkNode(int x, TreeLinkNode l, TreeLinkNode r) {val = x; left = l; right = r; }
static String serialize (TreeLinkNode node) {
if (node == null)
return "[]";
StringBuilder sb = new StringBuilder ();
serialize_helper (node, sb, "");
return Printer.wrap ("[\n", 95) + Printer.wrap (sb.toString (), 96) + Printer.wrap ("]", 95);
}
static void serialize_helper (TreeLinkNode 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 TreeLinkNode bfsBuild (int[] nums) {
if (nums.length == 0 || nums[0] < 0)
return null;
TreeLinkNode root = new TreeLinkNode (nums[0]);
int pos = 1;
Queue<TreeLinkNode> queue = new LinkedList<> ();
queue.offer (root);
while (!queue.isEmpty ()) {
int size = queue.size ();
for (int i = 0; i < size; i++) {
TreeLinkNode cur = queue.poll ();
if (pos >= nums.length)
break;
int left_num = nums[pos++];
cur.left = left_num >= 0 ? new TreeLinkNode (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 >= 0 ? new TreeLinkNode (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,-1,-1,5})));
System.out.println (serialize (bfsBuild (new int[] {1,2,3,4,5,-1,7,6,-1,-1,9,-1,8})));
System.out.println (serialize (bfsBuild (new int[] {1,2,3,4,5,-1,7,-1,-1,-1,6,-1,9})));
}
}