Leetcode 297.二叉树的序列化和反序列化

二叉树地序列化和反序列化

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

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

示例 网络

你能够将如下二叉树:数据结构

 

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

提示这与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并不是必须采起这种方式,你也能够采用其余的方法解决这个问题。spa

说明不要使用类的成员 / 全局 / 静态变量来存储状态,你的序列化和反序列化算法应该是无状态的。设计

 

 

 1 public class Codec {  2     // Encodes a tree to a single string.
 3     public List<Integer> serialize(TreeNode root) {  4         List<Integer> res = new ArrayList<>();  5  dfs(res, root);  6         return res;  7  }  8 
 9     private void dfs(List<Integer> res, TreeNode root) { 10         if (root == null) { 11             res.add(null); 12         } else { 13  res.add(root.val); 14  dfs(res, root.left); 15  dfs(res, root.right); 16  } 17  } 18 
19     // Decodes your encoded data to tree.
20     public TreeNode deserialize(List<Integer> data) { 21         int index[] = {0}; 22         TreeNode root = build(index, data); 23         return root; 24  } 25 
26     private TreeNode build(int[] index, List<Integer> data) { 27         Integer val = data.get(index[0]); 28         index[0] = index[0] + 1; 29         if (val == null) { 30             return null; 31         } else { 32             TreeNode node = new TreeNode(val); 33             node.left = build(index, data); 34             node.right = build(index, data); 35             return node; 36  } 37  } 38 }
相关文章
相关标签/搜索