| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | import java.util.LinkedList;/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Codec {    // Encodes a tree to a single string.    public String serialize(TreeNode root) { // Level-order traversal        StringBuilder sb = new StringBuilder();		LinkedList<TreeNode> list = new LinkedList<TreeNode>();		list.add(root);		TreeNode curr;		while (!list.isEmpty()) {			curr = list.poll();			if (curr == null) {				sb.append("null,");				continue;			}			sb.append(curr.val);			sb.append(',');			list.add(curr.left);			list.add(curr.right);		}		sb.deleteCharAt(sb.length()-1); // Remove the last ','		return sb.toString();    }    // Decodes your encoded data to tree.    public TreeNode deserialize(String data) {		String[] strs = data.split(",");		if (strs[0].equals("null")) return null; // Root is null		TreeNode root = new TreeNode(Integer.parseInt(strs[0]));		LinkedList<TreeNode> list = new LinkedList<TreeNode>();		list.add(root);		int idx = 1;		while (!list.isEmpty()) {			TreeNode curr = list.poll();			if (idx < strs.length) {				if (!strs[idx].equals("null")) {					curr.left = new TreeNode(Integer.parseInt(strs[idx]));					list.add(curr.left);				}				idx++;			}			if (idx < strs.length) {				if (!strs[idx].equals("null")) {					curr.right = new TreeNode(Integer.parseInt(strs[idx]));					list.add(curr.right);				}				idx++;			}		}        return root;    }}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));
 |