Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.98 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. public class Codec {
  11.    
  12.     // Decodes your encoded data to tree.
  13.     public TreeNode deserialize(String data) {
  14.         String[] stringNodes = data.split(",");
  15.         List<Integer> traversal = new ArrayList<Integer>();
  16.        
  17.         for (int i = 0; i < stringNodes.length; i++) {
  18.             String node = stringNodes[i];
  19.            
  20.             if (node.equals("null")) {
  21.                 traversal.add(null);
  22.             } else if (!node.isEmpty()) {
  23.                 traversal.add(Integer.parseInt(node));
  24.             }
  25.         }
  26.        
  27.         TreeNode root = null;
  28.            
  29.         if (traversal.size() > 0) {
  30.             root = new TreeNode(traversal.get(0));
  31.            
  32.             int index = 1;
  33.            
  34.             Queue<TreeNode> queue = new ArrayDeque();
  35.             queue.offer(root);
  36.            
  37.             while (!queue.isEmpty()) {
  38.                 for (int i = 0; i < queue.size(); i++) {
  39.                    
  40.                     TreeNode node = queue.poll();
  41.                    
  42.                     if (index < traversal.size()) {
  43.                         Integer leftVal = traversal.get(index);
  44.                        
  45.                         if (leftVal != null) {
  46.                             node.left = new TreeNode(leftVal);
  47.                             queue.offer(node.left);
  48.                         }
  49.                        
  50.                         index += 1;
  51.                     }
  52.                    
  53.                     if (index < traversal.size()) {
  54.                         Integer rightVal = traversal.get(index);
  55.                        
  56.                         if (rightVal != null) {
  57.                             node.right = new TreeNode(rightVal);
  58.                             queue.offer(node.right);
  59.                         }
  60.                        
  61.                         index += 1;
  62.                     }
  63.                 }
  64.             }
  65.         }
  66.        
  67.         return root;
  68.     }
  69.  
  70.     // Encodes a tree to a single string.
  71.     public String serialize(TreeNode root) {
  72.        
  73.         // gettings traversal
  74.         List<Integer> traversal = levelOrderTraversalWithNulls(root);
  75.        
  76.         // trim
  77.         for (int i = traversal.size() - 1; i >= 0; i--) {
  78.             if (traversal.get(i) != null) break;
  79.            
  80.             traversal.remove(i);
  81.         }
  82.        
  83.         // building string
  84.         StringBuilder sb = new StringBuilder();
  85.         for (int i = 0; i < traversal.size(); i++) {
  86.             sb.append(traversal.get(i));
  87.            
  88.             if (i != traversal.size() - 1) {
  89.                 sb.append(",");
  90.             }
  91.         }
  92.        
  93.         System.out.println(sb.toString());
  94.        
  95.         return sb.toString();
  96.     }
  97.    
  98.     private List<Integer> levelOrderTraversalWithNulls(TreeNode root) {
  99.         List<Integer> result = new ArrayList<Integer>();
  100.         Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
  101.        
  102.         if (root != null) {
  103.             queue.offer(root);
  104.             result.add(root.val);
  105.         }
  106.        
  107.         while (!queue.isEmpty()) {
  108.             for (int i = 0; i < queue.size(); i++) {
  109.                 TreeNode node = queue.poll();
  110.                
  111.                 result.add(node.left == null ? null : node.left.val);
  112.                 result.add(node.right == null ? null : node.right.val);
  113.                
  114.                 if (node.left != null) {
  115.                     queue.offer(node.left);
  116.                 }
  117.                
  118.                 if (node.right != null) {
  119.                     queue.offer(node.right);
  120.                 }
  121.             }
  122.         }
  123.        
  124.         return result;
  125.     }
  126. }
  127.  
  128. // Your Codec object will be instantiated and called as such:
  129. // Codec codec = new Codec();
  130. // codec.deserialize(codec.serialize(root));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement