层序遍历

image.png

  1. // Encodes a tree to a single string.
  2. public String serialize(TreeNode root) {
  3. StringBuilder sb = new StringBuilder();
  4. sb.append("[");
  5. Queue<TreeNode> queue = new LinkedList<>();
  6. queue.offer(root);
  7. while (!queue.isEmpty()) {
  8. int size = queue.size();
  9. for (int i = 0; i < size; i++) {
  10. TreeNode node = queue.poll();
  11. sb.append(node == null ? "null," : node.val + ",");
  12. if (node != null) {
  13. queue.offer(node.left);
  14. queue.offer(node.right);
  15. }
  16. }
  17. }
  18. sb.deleteCharAt(sb.length() - 1);
  19. sb.append("]");
  20. return sb.toString();
  21. }
  22. // Decodes your encoded data to tree.
  23. public TreeNode deserialize(String data) {
  24. String[] str = data.substring(1, data.length() - 1).split(",");
  25. int index = 0;
  26. TreeNode root = generatorNode(str[index++]);
  27. Queue<TreeNode> queue = new LinkedList<>();
  28. if (root != null) {
  29. queue.offer(root);
  30. }
  31. while (!queue.isEmpty()) {
  32. TreeNode node = queue.poll();
  33. node.left = generatorNode(index == str.length ? "null" : str[index++]);
  34. node.right = generatorNode(index == str.length ? "null" : str[index++]);
  35. if (node.left != null) {
  36. queue.offer(node.left);
  37. }
  38. if (node.right != null) {
  39. queue.offer(node.right);
  40. }
  41. }
  42. return root;
  43. }
  44. private TreeNode generatorNode(String s) {
  45. if (s.equals("null")) {
  46. return null;
  47. }
  48. return new TreeNode(Integer.parseInt(s));
  49. }