树Serialize and Deserialize Binary Tree

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树Serialize and Deserialize Binary Tree相关的知识,希望对你有一定的参考价值。

题目:

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 tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.

For example, you may serialize the following tree

    1
   /   2   3
     /     4   5

as "[1,2,3,null,null,4,5]", just the same as how LeetCode OJ serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.

 

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

思路:

序列化:层序遍历二叉树。 
反序列化:层序构建二叉树。

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */

/**
 * Encodes a tree to a single string.
 *
 * @param {TreeNode} root
 * @return {string}
 */
var serialize = function(root) {
    if(root==null){
        return [];
    }
    
    var queue=[],res=[];
    queue.push(root);
    
    while(queue.length!=0){
        var p=queue.unshift();
        res.push(p.val);
        if(p!=null){
            queue.push(p.left.val);
            queue.push(p.right.val);
        }
    }
    
    return res;
};

/**
 * Decodes your encoded data to tree.
 *
 * @param {string} data
 * @return {TreeNode}
 */
var deserialize = function(data) {
    if(data.length==0){
        return null;
    }
    var root=new TreeNode(data[0]),queue=[],res,loc=1;
    queue.push(root);
    while(queue.length!=0){
        var p=queue.unshift();
        var count=0;
        while(count<2){
            count++;
            var child=null;
            if(data[loc]==null){
                if(loc%2!=0){
                    child=new TreeNode(data[loc]);
                    p.left=child;
                }else{
                    child=new TreeNode(data[loc]);
                    p.right=child;
                }
                queue.push(child);
            }else{
                if(loc%2!=0){
                    p.left=null;
                }else{
                    child=new TreeNode(data[loc]);
                    p.right=null;
                }
            }
        }
    }
    
    return root;
};

/**
 * Your functions will be called as such:
 * deserialize(serialize(root));
 */

 

以上是关于树Serialize and Deserialize Binary Tree的主要内容,如果未能解决你的问题,请参考以下文章

LintCode 7.Serialize and Deserialize Binary Tree(含测试代码)

297. 二叉树的序列化与反序列化(Serialize and Deserialize Binary Tree)

[Lintcode]7. Serialize and Deserialize Binary Tree/[Leetcode]297. Serialize and Deserialize Binary T

449. Serialize and Deserialize BST

297. Serialize and Deserialize Binary Tree

Serialize and Deserialize BST