LeetCode 297. Serialize and Deserialize Binary Tree

Problem

LeetCode 297. Serialize and Deserialize Binary Tree

1. 题目简述

设计一组加密/解密二叉树的方式,加密的结果返回为字符串,解密的结果返回重建后二叉树的根节点。方法不一,尽可能发挥想象力。例如:

Example: 

You may serialize the following tree:

     1
    / \
   2   3
      / \
     4   5

as "[1,2,3,null,null,4,5]"

2. 算法思路

这是一道关于设计的题目。

3. 解法


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Codec {

    String NULL_C = "#", SPLITER = ",";

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        StringBuilder sb = new StringBuilder();
        serial(root, sb);
        return sb.toString();
    }

    private void serial(TreeNode root, StringBuilder sb) {
        if (root == null) {
            sb.append(NULL_C).append(SPLITER);
        } else {
            sb.append(root.val).append(SPLITER);
            serial(root.left, sb);
            serial(root.right, sb);
        }
    }

    public TreeNode deserialize(String data) {
        Queue<String> queue = new LinkedList<String>();
        queue.addAll(Arrays.asList(data.split(SPLITER)));
        return deserial(queue);
    }

    private TreeNode deserial(Queue<String> queue) {
        String temp = queue.poll();
        if (temp.equals(NULL_C)) {
            return null;
        } else {
            TreeNode node = new TreeNode(Integer.parseInt(temp));
            node.left = deserial(queue);
            node.right = deserial(queue);
            return node;
        }
    }

}

// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));