zoukankan      html  css  js  c++  java
  • 449. Serialize and Deserialize BST

    https://leetcode.com/problems/serialize-and-deserialize-bst/#/description

    Serialization is the process of 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 just 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.

    Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.

    Sol:

    Serialize:

    Use preorder to keep the BST data structure and store data in a list as strings.

    Deserialize:

    Pop elements from the serialization list and biuld new nodes in a preorder manner.

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Codec:
    
        # Time O(n)
        def serialize(self, root):
            """Encodes a tree to a single string.
            
            :type root: TreeNode
            :rtype: str
            """
            vals = []
            
            def preOrder(node):
                if node:
                    vals.append(node.val)
                    preOrder(node.left)
                    preOrder(node.right)
                    
            preOrder(root)
            
            return  ' '.join(map(str, vals))
        
        
        def deserialize(self, data):
            """Decodes your encoded data to tree.
            
            :type data: str
            :rtype: TreeNode
            """
            vals = collections.deque(int(val) for val in data.split())
            
            def build(minVal, maxVal):
                if vals and minVal < vals[0] < maxVal:
                    val = vals.popleft()
                    node = TreeNode(val)
                    node.left = build(minVal, val)
                    node.right = build(val, maxVal)
                    return node
                
            return build(float('-INF'), float('INF'))
            
    
    # Your Codec object will be instantiated and called as such:
    # codec = Codec()
    # codec.deserialize(codec.serialize(root))
  • 相关阅读:
    深度学习分类网络的发展历史
    杨辉三角
    【了解】贝塞尔曲线
    win10桌面点击事件蓝色边框处理
    try{}catch的隐藏(如何优雅的实现异常块)
    switch的一些思考(seitch与ifelse的区别)
    好看的控制台日志线
    Serializable和Externalizabl的异同
    java排序方式对比
    如何初始化Map,java
  • 原文地址:https://www.cnblogs.com/prmlab/p/7241469.html
Copyright © 2011-2022 走看看