zoukankan      html  css  js  c++  java
  • 二叉树的序列化与反序列化

    二叉树的序列化与反序列化

    题目:
    序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

    请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

    示例:

    你可以将以下二叉树:
    在这里插入图片描述

    序列化为 "[1,2,3,null,null,4,5]"

    解题思路:用先序遍历将二叉树结构序列化为一个字符串,空节点用'#'来表示,反序列化时用队列来存储所有节点(先序),判断当前出队元素是否为'#'如果时则时空节点,如果不是就继续反序列化该节点

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Codec {
    
        // Encodes a tree to a single string.
        public String serialize(TreeNode root) {
            if(root == null)
                return "#";
            
            return root.val + "," + serialize(root.left) + "," + serialize(root.right);
        }
    
        // Decodes your encoded data to tree.
        public TreeNode deserialize(String data) {
            Queue<String> queue = new LinkedList(Arrays.asList(data.split(",")));
            return deserialize(queue);
        }
        
        private TreeNode deserialize(Queue<String> queue) {
            //当队列为空时树也正好重建完成 所以不用判断队列空的情况
            String cur = queue.poll();
            if(cur.equals("#"))
                return null;
            
            TreeNode node = new TreeNode(Integer.parseInt(cur));
            node.left = deserialize(queue);
            node.right = deserialize(queue);
            
            return node;
        }
    }
    
    // Your Codec object will be instantiated and called as such:
    // Codec codec = new Codec();
    // codec.deserialize(codec.serialize(root));
    
  • 相关阅读:
    HDU 4315 Climbing the Hill [阶梯Nim]
    POJ 1704 Georgia and Bob [阶梯Nim]
    BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏 [Nim游戏 SG函数]
    BZOJ 1299: [LLH邀请赛]巧克力棒 [组合游戏]
    浏览器缓存知识点总结
    软件测试自动化的最新趋势
    性能测试面试题(附答案
    最流行的自动化测试工具,总有一款适合你
    49种软件测试方法
    linux执行jmeter脚本解决响应数据为空
  • 原文地址:https://www.cnblogs.com/katoMegumi/p/13918186.html
Copyright © 2011-2022 走看看