TreeNode [source code]


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 Printer.wrap ("[\n", 95) + Printer.wrap (sb.toString (), 96) + Printer.wrap ("]", 95);
        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})));
    }
}

results matching ""

    No results matching ""