首页 > 其他 > 详细

【树】Serialize and Deserialize Binary Tree

时间:2016-01-28 18:52:01      阅读:231      评论:0      收藏:0      [点我收藏+]

题目:

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

原文:http://www.cnblogs.com/shytong/p/5167052.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!