37. 序列化二叉树

NowCoder

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树。

解题思路

  1. private String deserializeStr;
  2. public String Serialize(TreeNode root) {
  3. if (root == null)
  4. return "#";
  5. return root.val + " " + Serialize(root.left) + " " + Serialize(root.right);
  6. }
  7. public TreeNode Deserialize(String str) {
  8. deserializeStr = str;
  9. return Deserialize();
  10. }
  11. private TreeNode Deserialize() {
  12. if (deserializeStr.length() == 0)
  13. return null;
  14. int index = deserializeStr.indexOf(" ");
  15. String node = index == -1 ? deserializeStr : deserializeStr.substring(0, index);
  16. deserializeStr = index == -1 ? "" : deserializeStr.substring(index + 1);
  17. if (node.equals("#"))
  18. return null;
  19. int val = Integer.valueOf(node);
  20. TreeNode t = new TreeNode(val);
  21. t.left = Deserialize();
  22. t.right = Deserialize();
  23. return t;
  24. }

37. 序列化二叉树 - 图1