Advertisement
1988coder

297. Serialize and Deserialize Binary Tree

Nov 27th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.12 KB | None | 0 0
  1. /**
  2.  * Definition for a binary tree node.
  3.  * public class TreeNode {
  4.  *     int val;
  5.  *     TreeNode left;
  6.  *     TreeNode right;
  7.  *     TreeNode(int x) { val = x; }
  8.  * }
  9.  */
  10. /*
  11. Serialize function
  12. Time Complexity: O(M * K) = O(M * 11) = O(M)
  13. Space Complexity: O(M * K) = O(M * 11) = O(M)
  14. M = Number of Nodes
  15. K = Average Length of each node. (Bounded by 11)
  16.  
  17. Deserialize function
  18. Time Complexity: O(N + M + M*K) = O(N + M*K) = O(N+N) = O(N)
  19. Space Complexity: O(M * K) = O(N)
  20. N = Length of the input string
  21. M = Number of Nodes
  22. K = Average Length of each node. (Bounded by 11)
  23. */
  24. public class Codec {
  25.  
  26.     // Encodes a tree to a single string.
  27.     public String serialize(TreeNode root) {
  28.         if (root == null) {
  29.             return "#";
  30.         }
  31.         StringBuilder sb = new StringBuilder();
  32.         serializeHelper(sb, root);
  33.         System.out.println(sb.toString());
  34.         return sb.toString();
  35.     }
  36.    
  37.     private void serializeHelper(StringBuilder sb, TreeNode node) {
  38.         if (node == null) {
  39.             sb.append("#");
  40.             return;
  41.         }
  42.         sb.append(node.val).append(",");
  43.         serializeHelper(sb, node.left);
  44.         sb.append(",");
  45.         serializeHelper(sb, node.right);
  46.     }
  47.  
  48.     // Decodes your encoded data to tree.
  49.     public TreeNode deserialize(String data) {
  50.         if (data == null || data.length() == 0) {
  51.             return null;
  52.         }
  53.         return deserializeHelper(new LinkedList<String>(Arrays.asList(data.split(","))));
  54.     }
  55.    
  56.     private TreeNode deserializeHelper(Queue<String> queue) {
  57.         if (queue.isEmpty()) {
  58.             return null;
  59.         }
  60.         String valToBeAdded = queue.poll();
  61.         if ("#".equals(valToBeAdded) || valToBeAdded.length() == 0) {
  62.             return null;
  63.         }
  64.         TreeNode node = new TreeNode(Integer.parseInt(valToBeAdded));
  65.         node.left = deserializeHelper(queue);
  66.         node.right = deserializeHelper(queue);
  67.         return node;
  68.     }
  69. }
  70.  
  71. // Your Codec object will be instantiated and called as such:
  72. // Codec codec = new Codec();
  73. // codec.deserialize(codec.serialize(root));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement