0449. Serialize and Deserialize BST (M)

Serialize and Deserialize BST (M)

题目

Serialization is converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.

Design an algorithm to serialize and deserialize a binary search tree. There is no restriction on how your serialization/deserialization algorithm should work. You need to ensure that a binary search tree can be serialized to a string, and this string can be deserialized to the original tree structure.

The encoded string should be as compact as possible.

Example 1:

Input: root = [2,1,3]
Output: [2,1,3]

Example 2:

Input: root = []
Output: []

Constraints:

  • The number of nodes in the tree is in the range [0, 104].
  • 0 <= Node.val <= 104
  • The input tree is guaranteed to be a binary search tree.

题意

实现BST的序列化和反序列化。

思路

可以用DFS实现,先序遍历将(根2,左1,右3)的BST序列化为"2 1 # # 3 # #"(#代表null)的形式,反序列化时以相同的顺序原样恢复。


代码实现

Java

public class Codec {

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        StringBuilder sb = new StringBuilder();
        serialize(root, sb);
        return sb.toString().trim();
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        String[] ss = data.split(" ");
        Queue<String> q = new LinkedList<>();
        for (String s : ss) {
            q.offer(s);
        }
        return deserialize(q);
    }

    private void serialize(TreeNode root, StringBuilder sb) {
        if (root == null) {
            sb.append("# ");
            return;
        }

        sb.append(root.val + " ");
        serialize(root.left, sb);
        serialize(root.right, sb);
    }

    private TreeNode deserialize(Queue<String> q) {
        if (q.isEmpty()) {
            return null;
        }

        if (q.peek().equals("#")) {
            q.poll();
            return null;
        }

        TreeNode root = new TreeNode(Integer.parseInt(q.poll()));
        root.left = deserialize(q);
        root.right = deserialize(q);
        return root;
    }
}
posted @ 2020-10-09 20:21  墨云黑  阅读(174)  评论(0编辑  收藏  举报