publicclassCodec{// Encodes a tree to a single string.publicStringserialize(TreeNoderoot){if(root==null)return"";StringBuildersb=newStringBuilder();serialize(root,sb);returnsb.toString();}// Decodes your encoded data to tree.publicTreeNodedeserialize(Stringdata){if(data.isEmpty())returnnull;finalString[]vals=data.split(" ");Queue<Integer>q=newArrayDeque<>();for(finalStringval:vals)q.offer(Integer.parseInt(val));returndeserialize(Integer.MIN_VALUE,Integer.MAX_VALUE,q);}privatevoidserialize(TreeNoderoot,StringBuildersb){if(root==null)return;sb.append(root.val).append(" ");serialize(root.left,sb);serialize(root.right,sb);}privateTreeNodedeserialize(intmin,intmax,Queue<Integer>q){if(q.isEmpty())returnnull;finalintval=q.peek();if(val<min||val>max)returnnull;q.poll();TreeNoderoot=newTreeNode(val);root.left=deserialize(min,val,q);root.right=deserialize(val,max,q);returnroot;}}