题目描述:
示例:
思路:
代码实现
/**
* 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) {
if (root == null) return "[]";
StringBuilder sb = new StringBuilder();
sb.append("[");
Queue<TreeNode> queue = new LinkedList();
queue.offer(root);
sb.append(root.val).append(",");
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if(node.left != null) {
queue.offer(node.left);
sb.append(node.left.val).append(",");
} else {
sb.append("null,");
}
if(node.right != null) {
queue.offer(node.right);
sb.append(node.right.val).append(",");
} else {
sb.append("null,");
}
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]");
return sb.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if ("[]".equals(data)) return null;
String nodeStr = data.substring(1, data.length() - 1);
String[] nodeArr = nodeStr.split(",");
Queue<TreeNode> queue = new LinkedList();
Integer val = Integer.valueOf(nodeArr[0]);
TreeNode head = new TreeNode(val);
TreeNode cur = head;
queue.offer(cur);
for (int i = 1; i < nodeArr.length;i += 2) {
TreeNode node = queue.poll();
Integer leftVal = getVal(nodeArr, i);
if (leftVal != null) {
TreeNode leftNode = new TreeNode(leftVal);
node.left = leftNode;
queue.offer(leftNode);
}
Integer rightVal = getVal(nodeArr, i + 1);
if (rightVal != null) {
TreeNode rightNode = new TreeNode(rightVal);
node.right = rightNode;
queue.offer(rightNode);
}
}
return head;
}
public Integer getVal(String[] nodeStr, Integer index) {
String str = nodeStr[index];
if ("null".equals(str)) {
return null;
}
Integer val = Integer.valueOf(str);
return val;
}
}