Serialize and Deserialize BST (M)
題目
Serialization is converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.
Design an algorithm to serialize and deserialize a binary search tree. There is no restriction on how your serialization/deserialization algorithm should work. You need to ensure that a binary search tree can be serialized to a string, and this string can be deserialized to the original tree structure.
The encoded string should be as compact as possible.
Example 1:
Input: root = [2,1,3]
Output: [2,1,3]
Example 2:
Input: root = []
Output: []
Constraints:
- The number of nodes in the tree is in the range
[0, 104]. 0 <= Node.val <= 104- The input tree is guaranteed to be a binary search tree.
題意
實作BST的序列化和反序列化,
思路
可以用DFS實作,先序遍歷將(根2,左1,右3)的BST序列化為"2 1 # # 3 # #"(#代表null)的形式,反序列化時以相同的順序原樣恢復,
代碼實作
Java
public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
StringBuilder sb = new StringBuilder();
serialize(root, sb);
return sb.toString().trim();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
String[] ss = data.split(" ");
Queue<String> q = new LinkedList<>();
for (String s : ss) {
q.offer(s);
}
return deserialize(q);
}
private void serialize(TreeNode root, StringBuilder sb) {
if (root == null) {
sb.append("# ");
return;
}
sb.append(root.val + " ");
serialize(root.left, sb);
serialize(root.right, sb);
}
private TreeNode deserialize(Queue<String> q) {
if (q.isEmpty()) {
return null;
}
if (q.peek().equals("#")) {
q.poll();
return null;
}
TreeNode root = new TreeNode(Integer.parseInt(q.poll()));
root.left = deserialize(q);
root.right = deserialize(q);
return root;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/165088.html
標籤:其他
上一篇:vscode中實作滾輪縮放代碼
