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)
There is no in-browser runner. This is the file from the curriculum, unchanged.
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}