Friday, March 9, 2018

7. Binary Tree Serialization

Thinking:

  1. binary Tree 和 Stringbuilder 的联合题
  2. 对Stringbuilder 和StringTokenizer的使用方法的考验

public String serialize(TreeNode root) {
        // write your code here
        StringBuilder result = new StringBuilder();
        if (root == null) return result.toString();
       
        serialHelper(root, result);
        return result.substring(0, result.length() - 1);
    }
   
    private void serialHelper(TreeNode root, StringBuilder result) {
        if (root == null) {
            result.append("#,");
        } else {
            result.append(root.val).append(",");
            serialHelper(root.left, result);
            serialHelper(root.right, result);
        }
    }

    /**
     * This method will be invoked second, the argument data is what exactly
     * you serialized at method "serialize", that means the data is not given by
     * system, it's given by your own serialize method. So the format of data is
     * designed by yourself, and deserialize it here as you serialize it in
     * "serialize" method.
     */
    public TreeNode deserialize(String data) {
        // write your code here
        if (data == null || data.length() == 0) return null;

        StringTokenizer st = new StringTokenizer(data, ",");
        return deseriaHelper(st);
    }
   
    private TreeNode deseriaHelper(StringTokenizer st) {
        if (!st.hasMoreTokens()) return null;

        String val = st.nextToken();
        if (val.equals("#")) {
            return null;
        }

        TreeNode root = new TreeNode(Integer.parseInt(val));
        root.left = deseriaHelper(st);
        root.right = deseriaHelper(st);

        return root;
    }

No comments:

Post a Comment