zoukankan      html  css  js  c++  java
  • 【树】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));
     */
  • 相关阅读:
    python标准库之MultiProcessing库的研究 (1)
    python标准库Beautiful Soup与MongoDb爬喜马拉雅电台的总结
    ASP.NET平台下从浏览器地址栏输入之后发生的事
    async & await 异步编程的一点巧方法
    【MySQL】MySQL一主二从复制环境切换主从库
    【MySQL】MySQL基于二进制文件安装
    【MySQL】MySQL半同步复制
    【MySQL】MySQL搭建主主复制(双主复制/DUAL Master)环境
    【MySQL】MySQL复制
    【MySQL】MySQL搭建主从复制环境
  • 原文地址:https://www.cnblogs.com/shytong/p/5167052.html
Copyright © 2011-2022 走看看