【发布时间】:2021-11-14 02:37:06
【问题描述】:
我正在解决 LeetCode 问题297. Serialize and Deserialize Binary Tree:
序列化是将数据结构或对象转换为位序列的过程,以便将其存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一或另一个计算机环境中重建.
设计一种算法来序列化和反序列化二叉树。您的序列化/反序列化算法的工作方式没有限制。你只需要保证一棵二叉树可以序列化成一个字符串,并且这个字符串可以反序列化成原来的树结构。
我从 Geeks for Geeks 上发现的一个类似问题的正确解决方案中获得灵感:Serialize and Deserialize a Binary Tree :
class Tree
{
public void serialize(Node root, ArrayList<Integer> al)
{
//code here
if(root == null) {
al.add(-1);
return;
}
al.add(root.data);
serialize(root.left,al);
serialize(root.right,al);
}
public Node deSerialize(ArrayList<Integer> al)
{
//code here
if(al.get(0) == -1) {
al.remove(0);
return null;
}
Node newNode = new Node(al.get(0));
al.remove(0);
newNode.left = deSerialize(al);
newNode.right = deSerialize(al);
return newNode;
}
}
我尝试针对 LeetCode 问题调整这种方法。但是,我的尝试没有产生所需的输出:
public class Codec {
StringBuilder sb = new StringBuilder();
public String serialize(TreeNode root) {
if(root==null) {
sb.append("^");
return sb.toString();
}
sb.append(String.valueOf(root.val));
serialize(root.left);
serialize(root.right);
return sb.toString();
}
public TreeNode deserialize(String data) {
if(data.charAt(0)=='^') {
data = data.substring(1);
return null;
}
TreeNode newNode = new TreeNode(Character.getNumericValue(data.charAt(0)));
data = data.substring(1);
newNode.left = deserialize(data);
newNode.right = deserialize(data);
return newNode;
}
}
我哪里做错了?
【问题讨论】:
-
你正在调用
serialize(...),但你没有对返回值做任何事情。它应该是sb.append(serialize(...))。除此之外,您还需要将stringBuilder的创建移到serialize函数中。 -
下面的例子有效,因为你没有返回值,你正在写入传递的
arrayList
标签: java serialization tree binary-tree binary-search-tree