码迷,mamicode.com
首页 > 其他好文 > 详细

449. Serialize and Deserialize BST

时间:2017-07-26 20:24:54      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:nbsp   ant   code   work   tree   ini   search   another   proc   

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))

 

449. Serialize and Deserialize BST

标签:nbsp   ant   code   work   tree   ini   search   another   proc   

原文地址:http://www.cnblogs.com/prmlab/p/7241469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!