题目:
请实现两个函数,分别用来序列化和反序列化二叉树。
实现
public class Solution62 {
public static void serialize(BinaryTreeNode root, List<Integer> result) {
Queue<BinaryTreeNode> queue =
new ArrayDeque<BinaryTreeNode>();
queue.add(root);
BinaryTreeNode node;
while (!queue.isEmpty()) {
node = queue.poll();
if (node ==
null) {
result.add(
null);
}
else {
result.add(node.
value);
queue.add(node.left);
queue.add(node.right);
}
}
}
public static BinaryTreeNode
deserialize(List<Integer> result,
int index) {
if (result.size() <
1 || index <
0 || result.size() <= index || result.
get(index) ==
null) {
return null;
}
BinaryTreeNode root =
new BinaryTreeNode(result.
get(index));
root.left = deserialize(result, index *
2 +
1);
root.right = deserialize(result, index *
2 +
2);
return root;
}
public static void main(String[] args) {
test01();
}
private static void test01() {
BinaryTreeNode n1 =
new BinaryTreeNode(
1);
BinaryTreeNode n2 =
new BinaryTreeNode(
2);
BinaryTreeNode n3 =
new BinaryTreeNode(
3);
BinaryTreeNode n4 =
new BinaryTreeNode(
4);
BinaryTreeNode n5 =
new BinaryTreeNode(
5);
BinaryTreeNode n6 =
new BinaryTreeNode(
6);
BinaryTreeNode n7 =
new BinaryTreeNode(
7);
BinaryTreeNode n8 =
new BinaryTreeNode(
8);
BinaryTreeNode n9 =
new BinaryTreeNode(
9);
n1.left = n2;
n1.right = n3;
n2.left = n4;
n2.right = n5;
n3.left = n6;
n3.right = n7;
n4.left = n8;
n4.right = n9;
List<Integer> result =
new LinkedList<>();
serialize(n1, result);
System.
out.println(result);
System.
out.println();
BinaryTreeNode root = deserialize(result,
0) ;
printTree(root);
}
private static void printTree(BinaryTreeNode root) {
if (root !=
null) {
printTree(root.left);
System.
out.printf(
"%-3d", root.
value);
printTree(root.right);
}
}
}