栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指 Offer 37. 序列化二叉树

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指 Offer 37. 序列化二叉树

剑指 Offer 37. 序列化二叉树

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

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

解题思路

1.序列化
层序遍历二叉树,将遍历结果放到队列里
2.反序列化
依次弹出队列中的元素,生成每一层元素
使用另一个队列,记录每一层的节点

代码

1.序列化

    public Queue serialize(TreeNode root) {
        Queue ans=new LinkedList<>();
        Queue que=new LinkedList<>();
        if(root==null){
            ans.add(null);
            return ans;
        }
        ans.add(String.valueOf(root.val));
        que.add(root);
        while(!que.isEmpty()){
            root=que.poll();
            if(root.left!=null){
                ans.add(String.valueOf(root.left.val));
                que.add(root.left);
            }else{
                ans.add(null);
            }
            if(root.right!=null){
                ans.add(String.valueOf(root.right.val));
                que.add(root.right);
            }else{
                ans.add(null);
            }
        }
        return ans;
    }

2.反序列化

    public TreeNode deserialize(Queue data) {
        if(data==null||data.size()==0){
            return null;
        }
        TreeNode head=generateNode(data.poll());
        if(head==null){
            return head;
        }
        Queue que=new LinkedList<>();
        que.add(head);
        TreeNode node=null;
        while(!que.isEmpty()){
            node=que.poll();
            node.left=generateNode(data.poll());
            node.right=generateNode(data.poll());
            if(node.left!=null){
                que.add(node.left);
            }
            if(node.right!=null){
                que.add(node.right);
            }
        }
        return head;
    }
    public TreeNode generateNode(String str){
        if(str==null){
            return null;
        }
        return new TreeNode(Integer.valueOf(str));
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号