Serialize and deserilize a binary Tree

WAP 线上面试题 livecoding

Design an algorithm to serialize and deserialize a binary tree, in which the tree can be serialized to a list of Integer and this list can be deserilized to the original tree structure.

并不是leetcode原题,是层序遍历。
一般的是序列化为String,如果是序列化为String,就需要在 node之间插入’!’ 表示结束。
然后’#’表示null。
但本题是list,思想类似,不过处理null有点麻烦.
live coding的时候紧张lol, 面试官都给tips,序列化和反序列化都是层序化,反序列化注意root要先存到queue,按顺序赋给left 和right即可。

代码如下:

package worksExam;
import java.util.*;class TreeNode{int val;TreeNode left;TreeNode right;public TreeNode(int val){this.val=val;}
}public class Main {public List<Integer> serialize(TreeNode root){List<Integer> list=new ArrayList<Integer>();if(root==null)return list;LinkedList<TreeNode> queue=new LinkedList<TreeNode>();queue.add(root);while(queue.isEmpty()==false){TreeNode treeNode=queue.peek();queue.remove();/** -1 表示该节点是null!* 如果是表示null,加入null到list,* 下面就不要执行了,直接continue到下一次remove。* 否则就会进入死循环,所以后面不会有的就continue!* */if(treeNode.val!=-1){list.add(treeNode.val);}else{list.add(null);continue;}if(treeNode.left!=null){queue.add(treeNode.left);}else{queue.add(new TreeNode(-1));}if(treeNode.right!=null){queue.add(treeNode.right);}else{queue.add(new TreeNode(-1));}}return list;}public TreeNode deserialize(List<Integer> data){if(data.size()<1||data==null)return null;//rootLinkedList<TreeNode> queue=new LinkedList<TreeNode>();TreeNode root=new TreeNode(data.get(0));int index=0;queue.add(root);TreeNode node=null;while(!queue.isEmpty()){node=queue.remove();if(data.get(++index)!=null)node.left=new TreeNode(data.get(index));if(data.get(++index)!=null)node.right=new TreeNode(data.get(index));if(node.left!=null){queue.add(node.left);}if(node.right!=null){queue.add(node.right);}}return root;}}

WAP二叉树序列化和反序列化相关推荐

  1. 【二叉树】二叉树序列化和反序列化

    二叉树序列化和反序列化 1.二叉树 --> 字符串(序列化) 2.字符串 --> 二叉树(反序列化) 序列化的方式 1.根据先序遍历序列化 2. 根据中序遍历序列化 3.根据后序遍历序列化 ...

  2. 二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)

    297. 二叉树的序列化与反序列化(剑指 Offer 37. 序列化二叉树)(剑指 Offer II 048. 序列化与反序列化二叉树) class Codec:def serialize(self, ...

  3. LeetCode——二叉树序列化与反序列化

    文章目录 题目 思路 问题一 问题二 代码实现 题目 请实现两个函数,分别用来序列化和反序列化二叉树. 设计一个算法来实现二叉树的序列化与反序列化.不限定序列 / 反序列化算法执行逻辑,你只需要保证一 ...

  4. 二叉树序列化和反序列化的两种方式

    介绍 二叉树的序列化和反序列化,有两种方式: 第一种方式在将二叉树序列化为数组的时候,需要标记空指针为特殊符号,这样在反序列化的时候,就可以根据这些符号和序列方式来确定一颗二叉树. 第二种方式在序列化 ...

  5. 二叉树序列化、反序列化、层次遍历python

    一.二叉树的分层遍历 给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构: 思路: 增加两个TreeNode:last和nlast last:表示当前遍历层最右结点 nlas ...

  6. 剑指offer:二叉树序列化与反序列化 - Python

    转载自:https://blog.csdn.net/u010005281/article/details/79787278 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树. 解题思路 序列化 ...

  7. 二叉树序列化/反序列化

    二叉树被记录成文件的过程,为二叉树的序列化 通过文件重新建立原来的二叉树的过程,为二叉树的反序列化 设计方案并实现. (已知结点类型为32位整型) 思路:先序遍历实现. 因为要写入文件,我们要把二叉树 ...

  8. 【C++二叉树的序列化和反序列化】

    二叉树序列化和反序列化: 预期目标: 序列化:将链表化为类似于 1_ 2_#_ #_ 3 _ #_ #_的形式,#代表指针指向为空. 反序列化:将序列化后的数据还原为二叉树 要点: 1.数据类型转换: ...

  9. [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

最新文章

  1. 2020 最烂密码 TOP 200 大曝光!
  2. cross_val_score,cross_val_predict,cross_validate理解
  3. 基于Solr的空间搜索学习笔记
  4. Windows完成端口的理解
  5. Java08-java语法基础(七)构造方法
  6. 前端学习(2820):全局文件tabber字段
  7. 第十章 內核同步的方法
  8. Windows登录密码轻松破解
  9. java class多重泛型_多重继承求泛型类的类型
  10. 什么是人工智能(AI)数据平台?
  11. c语言中if函数作用,c语言if函数的使用方法
  12. GDB X命令详解
  13. 研发人员需要什么知识和能力
  14. Flutter CircularProgressIndicator圆形进度指示器
  15. 最小生成树算法-克鲁斯卡尔和普利姆
  16. PHP图书信息表books,创建一个图书表
  17. Android源码下载(可编译)
  18. 大公司研发部门普遍存在的问题(日常吐槽)
  19. 沧海一粟小组(第二次作业)
  20. IP协议,ARP协议

热门文章

  1. miaov css基础学习笔记
  2. [zt]用模型驱动Eclipse开发
  3. EMF介绍系列(二、从模型生成应用程序)
  4. c语言程序调试时无法启动程序,c – “无法启动程序”(调试版本)
  5. 仓库拣货标签——仓库16代
  6. 强推10款Python常用的开发工具
  7. pg_tables,pg_indexes,pg_views,pg_user,pg_roles,pg_rules,pg_settings详解
  8. 黄聪:VS2010中如何让webbrowser不弹出JS异常错误窗口(c#.net)
  9. 淘宝的估算并发量公式
  10. VB6中ScaleMode位置属性特性的实验及总结.