1. 程式人生 > >LeetCode-Serialize And Deserialize BST

LeetCode-Serialize And Deserialize BST

一、Description

題目描述:實現一個二叉樹的序列化與反序列化。


二、Analyzation

   1        
 /   \
2     3       
 \    
  4     

序列化:通過遞迴將一個二叉樹的前序序列轉換成形如 1, 2, #, 4, #, #, 3, #, # 的字串,可以方便地儲存在檔案中。

反序列化:將上述字串轉換成一個字串陣列,然後重新構建二叉樹,轉換為原來的二叉樹,並返回根結點。之所以用一個int陣列傳遞引數,是因為如果傳遞的是int,那麼對於當前遞迴來說僅僅是一個區域性引數,而我們需要的是一個物件,所以傳遞的是一個數組。


三、Accepted code

public class Codec {
    private String result = "";
    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        if (root == null) {
            return "#";
        }
        return String.valueOf(root.val) + "," + serialize(root.left) + "," + serialize(root.right);
    }
    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        String[]strs = data.split(",");
        return buildTree(strs, new int[]{0});
    }
    public TreeNode buildTree(String[] arr, int[] idx) {
        if(arr[idx[0]].equals("#")){
            idx[0]++;
            return null;
        }
        TreeNode root = new TreeNode(Integer.parseInt(arr[idx[0]++]));
        root.left = buildTree(arr, idx);
        root.right = buildTree(arr, idx);
        return root;
    }
}