Binary Tree Serialization (Preorder)

LeetCode 297 二叉树序列化与反序列化:先序 DFS + 空节点占位。

#resource / algorithm #type / howto #status / evergreen #ds / tree #algo / dfs #algo / recursion #source / leetcode

[!info] related notes 算法面试题型 MOC 二叉树高频题

Binary Tree Serialization (Preorder)

LeetCode: https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/

思路

  • 先序遍历输出节点值。
  • 空节点输出占位符(例如 #)。
  • 反序列化时按相同顺序读 token,递归构建。

只要空节点也被记录,结构就不会丢。

Java Template

import java.util.*;

public class Codec {
    private static final String SEP = ",";
    private static final String NIL = "#";

    public String serialize(TreeNode root) {
        StringBuilder sb = new StringBuilder();
        ser(root, sb);
        return sb.toString();
    }

    private void ser(TreeNode node, StringBuilder sb) {
        if (node == null) {
            sb.append(NIL).append(SEP);
            return;
        }
        sb.append(node.val).append(SEP);
        ser(node.left, sb);
        ser(node.right, sb);
    }

    public TreeNode deserialize(String data) {
        Deque<String> q = new ArrayDeque<>(Arrays.asList(data.split(SEP)));
        return de(q);
    }

    private TreeNode de(Deque<String> q) {
        if (q.isEmpty()) return null;
        String s = q.pollFirst();
        if (s.equals(NIL)) return null;
        TreeNode node = new TreeNode(Integer.parseInt(s));
        node.left = de(q);
        node.right = de(q);
        return node;
    }
}
创建于 2026/3/16 更新于 2026/5/27