vlambda博客
学习文章列表

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

🙇👀🙇树的遍历一般有两个策略:BFS / DFS

  • BFS 广度优先搜索,按照树的层次顺序从上到下遍历所有的节点。

  • DFS深度优先搜索,从树的根节点开始,向一个方向一直延伸到某个叶子节点,然后回到根,跳到另一个子树上,继续遍历。

根据根节点、左右子节点的输出顺序,可以将树的遍历分为:

  • 前序遍历

  • 中序遍历

  • 后序遍历


👀💬今日的练习,二叉树的序列化和反序列化。

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

🙋递归

                public String serialize(TreeNode root) { if (root == null) { return "null"; } String rserialize = rserialize(root, ""); return rserialize;}
private String rserialize(TreeNode root, String str) {  if (root == null) { if ("".equals(str)) { str += "null"; } else { str += ",null";      }  } else { if ("".equals(str)) { str += "" + str.valueOf(root.val); } else { str = str + "," + str.valueOf(root.val);      } str = rserialize(root.left, str); str = rserialize(root.right, str); } return str;}
public TreeNode deserialize(String data) {
if (data.equals("null")) { return null; } LinkedList<String> list = new LinkedList<>(Arrays.asList(data.split(","))); return rdeserialize(list);}
private TreeNode rdeserialize(LinkedList<String> list) { if (list.get(0).equals("null")) { list.removeFirst(); return null;  }  TreeNode node = new TreeNode(Integer.valueOf(list.get(0))); list.removeFirst(); node.left = rdeserialize(list); node.right = rdeserialize(list); return node;}

不积跬步,无以至千里。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

END


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