题解 | #序列化二叉树#
序列化二叉树
https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { String Serialize(TreeNode root) { StringBuilder sb = new StringBuilder(); sb.append("{"); if (root == null) { sb.append("#"); } else { Queue<TreeNode> q = new LinkedList(); q.offer(root); while (!q.isEmpty()) { TreeNode t = q.poll(); if (t != null) { sb.append(t.val); sb.append(","); q.offer(t.left); q.offer(t.right); } else { sb.append("#"); sb.append(","); } } } char tail = sb.charAt(sb.length() - 1); while (tail == ',' || tail == '#') { sb.deleteCharAt(sb.length() - 1); tail = sb.charAt(sb.length() - 1); } sb.append("}"); return sb.toString(); } TreeNode Deserialize(String str) { str=str.substring(1,str.length()-1); String [] nodes = str.split(","); if(nodes.length==0 || nodes[0].equals(""))return null; int i = 0; Queue<TreeNode> q = new LinkedList<>(); TreeNode root = new TreeNode(Integer.parseInt(nodes[0])); q.offer(root); i++; while(!q.isEmpty()&&i<nodes.length){ TreeNode cur = q.poll(); if(nodes[i].equals("#")){ cur.left=null; }else{ TreeNode left = new TreeNode(Integer.parseInt(nodes[i])); cur.left = left; q.offer(left); } i++; if(i>=nodes.length)break; if(nodes[i].equals("#")){ cur.right=null; }else{ TreeNode right = new TreeNode(Integer.parseInt(nodes[i])); cur.right = right; q.offer(right); } i++; } return root; } }