
这题感觉上做法很多,就提供一个比较容易理解的。其实Example已经给了你一个很重要的提示,就是空节点可以用null字符串表示。所以其中一个做法就是用特别符号标识空节点,然后结合BFS就可以了。
serialize的过程就是一个正常的BFS的过程。遇到值就放值,遇到null pointer就放一个字符n
deserialize的过程也是一个正常的BFS的过程。遇到非N字符就变成一个node,遇到n字符就变成一个null pointer。只是稍微要注意的是,这是一边在build tree一边还需要放进queue里面。然后在queue遍历上一层的时候,build树就build下一层。
这题不太值得hard,根据上述算法,给出代码如下:
public String serialize(TreeNode root) {
StringBuilder builder = new StringBuilder();
Queue<TreeNode> nodeQ = new LinkedList<TreeNode>();
nodeQ.add(root);
while (!nodeQ.isEmpty()) {
TreeNode currNode = nodeQ.poll();
if (currNode == null) {
builder.append('n');
} else {
builder.append(currNode.val);
nodeQ.add(currNode.left);
nodeQ.add(currNode.right);
}
}
return builder.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
Queue<TreeNode> nodeQ = new LinkedList<>();
TreeNode root = null;
String[] nodes = data.split(",");
int index = 0;
while (index < nodes.length) {
if (root == null) {
root = this._parseNode(nodes[index]);
index++;
nodeQ.add(root);
} else {
TreeNode currNode = nodeQ.poll();
if (currNode == null) continue;
currNode.left = this._parseNode(nodes[index]);
currNode.right = this._parseNode(nodes[index + 1]);
nodeQ.add(currNode.left);
nodeQ.add(currNode.right);
index += 2;
}
}
return root;
}
private TreeNode _parseNode(String str) {
return str.equals("n") ? null : new TreeNode(Integer.parseInt(str));
}
324

被折叠的 条评论
为什么被折叠?



