public class Solution {
String Serialize(TreeNode root) {
// 每个结点以"!"分隔开,方便后续的反序列化
if (root == null) {
return "#!";
}
// 先序遍历完成序列化
return root.val + "!"
+ Serialize(root.left)
+ Serialize(root.right);
}
TreeNode Deserialize(String str) {
if (str == null || str.length() == 0|| str.equals("#!")) {
return null;
}
// 使用双端队列来模拟栈stack
Deque<String>stack = new LinkedList<>();
// 将所有的结点放入栈,此为先序遍历的结点
stack.addAll(Arrays.asList(str.split("!")));
// 先序遍历的方式反序列化
return Deserialize(stack);
}
TreeNode Deserialize(Deque<String>stack) {
// 栈为空,返回空结点null
if (stack.isEmpty()) {
return null;
}
String value = stack.pollFirst();
// 若为空结点,则返回null
if (value.equals("#")) {
return null;
}
// 先序遍历建树
TreeNode root = new TreeNode(Integer.parseInt(value));
root.left = Deserialize(stack);
root.right = Deserialize(stack);
return root;
}
}