• 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;
        }
    }
    
  • 相关阅读:
    读书笔记之:数据结构,算法与应用(3)
    C++中的虚函数继承与虚继承
    读书笔记之:Effective STL
    C++虚函数及虚函数表解析
    类中的常量, const对象和成员函数
    读书笔记之:Boost程序库完全开发指南(Ch14)
    读书笔记之:C++探秘——68讲贯通C++
    读书笔记之:Boost程序库完全开发指南(ch516)
    配置java的环境变量
    查询并杀死死锁
  • 原文地址:https://www.cnblogs.com/mapoos/p/13788120.html
Copyright © 2020-2023  润新知