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));
    
  • 相关阅读:
    python GUI
    Python 博客网站资源
    Python 100 天学习计划
    pycharm基本设置
    MySQL 57安装部署(Zip版)(Windows版)
    nginx在centos下的安装
    仓位计算
    python笔记
    vue(一)--监听事件
    Hibernate(五)--级联
  • 原文地址:https://www.cnblogs.com/katoMegumi/p/13918186.html
Copyright © 2011-2022 走看看