LeetCode-Serialize And Deserialize BST
阿新 • • 發佈:2018-11-11
一、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; } }