Blind 75

Serialize and Deserialize Binary Tree

Problem
LC 297
Category
Tree
File
blind75_LC297SerializeAndDeserializeBinaryTree.java
Path
pkg5leetcode/blind75/blind75_LC297SerializeAndDeserializeBinaryTree.java
Package
pkg5leetcode.blind75
Command
java pkg5leetcode/blind75/blind75_LC297SerializeAndDeserializeBinaryTree.java
Approach
Preorder with 'N' null markers; rebuild via queue.
Complexity
Time O(n), Space O(n)

LeetCode solutions

There is no in-browser runner. This is the file from the curriculum, unchanged.

pkg5leetcode/blind75/blind75_LC297SerializeAndDeserializeBinaryTree.java
1package pkg5leetcode.blind75;2 3/*4 * Serialize and Deserialize Binary Tree | LC 2975 * APPROACH: Preorder with 'N' null markers; rebuild via queue.6 * COMPLEXITY: Time O(n), Space O(n)7 */8import java.util.*;9 10public class blind75_LC297SerializeAndDeserializeBinaryTree {11    /** Same shape as pkg5leetcode/common/TreeNode.java (nested for single-file runs). */12 13    static class TreeNode {14        int val;15        TreeNode left, right;16        TreeNode(int val) { this.val = val; }17    }18 19    static class Codec {20        String serialize(TreeNode root) {21            StringBuilder sb = new StringBuilder();22            build(root, sb);23            return sb.toString();24        }25 26        void build(TreeNode node, StringBuilder sb) {27            if (node == null) { sb.append("N,"); return; }28            sb.append(node.val).append(',');29            build(node.left, sb);30            build(node.right, sb);31        }32 33        TreeNode deserialize(String data) {34            Queue<String> q = new LinkedList<>(Arrays.asList(data.split(",")));35            return parse(q);36        }37 38        TreeNode parse(Queue<String> q) {39            String tok = q.poll();40            if ("N".equals(tok)) return null;41            TreeNode node = new TreeNode(Integer.parseInt(tok));42            node.left = parse(q);43            node.right = parse(q);44            return node;45        }46    }47 48    public static void main(String[] args) {49        Codec codec = new Codec();50        TreeNode root = new TreeNode(1);51        root.left = new TreeNode(2);52        root.right = new TreeNode(3);53        root.right.left = new TreeNode(4);54        root.right.right = new TreeNode(5);55        TreeNode back = codec.deserialize(codec.serialize(root));56        check(back.val == 1 && back.left.val == 2 && back.right.right.val == 5, "case1");57        check(codec.deserialize(codec.serialize(null)) == null, "case2");58        System.out.println("all tests passed");59    }60 61    static void check(boolean cond, String name) {62        if (!cond) throw new AssertionError("FAILED: " + name);63        System.out.println("  PASS " + name);64    }65}