Serialize and Deserialize tree: 但是要自己写node structure 和 用linkedlist去存
package tree;
import java.util.*;
import z_dataStructure.TreeNode;
public class SerializationAndDe {
public LinkedList<Integer> s(TreeNode root) {
LinkedList<Integer> ret = new LinkedList<>();
if (root == null) {
return ret;
}
Deque<TreeNode> queue = new ArrayDeque<>();
queue.offer(root);
ret.add(root.val);
while (!queue.isEmpty()) {
TreeNode tn = queue.poll();
if (tn.left != null) {
queue.offer(tn.left);
ret.add(tn.left.val);
} else {
ret.add(null);
}
if (tn.right != null) {
queue.offer(tn.right);
ret.add(tn.right.val);
} else {
ret.add(null);
}
}
return ret;
}
public TreeNode d(LinkedList<Integer> list) {
if (list.isEmpty()) {
return null;
}
Iterator<Integer> it = list.iterator();
TreeNode ret = new TreeNode(it.next());
Deque<TreeNode> queue = new ArrayDeque<>();
queue.offer(ret);
while (!queue.isEmpty()) {
TreeNode tn = queue.poll();
Integer left = it.next();
Integer right = it.next();
if (left != null) {
tn.left = new TreeNode(left);
queue.offer(tn.left);
}
if (right != null) {
tn.right = new TreeNode(right);
queue.offer(tn.right);
}
}
return ret;
}
public static void main(String[] args) {
TreeNode tn1 = new TreeNode(1);
TreeNode tn2 = new TreeNode(2);
TreeNode tn3 = new TreeNode(3);
TreeNode tn4 = new TreeNode(4);
TreeNode tn5 = new TreeNode(5);
TreeNode tn6 = new TreeNode(6);
TreeNode tn7 = new TreeNode(7);
TreeNode tn8 = new TreeNode(8);
tn1.left = tn2;
tn1.right = tn3;
tn2.left = tn4;
tn3.left = tn5;
tn5.left = tn6;
tn5.right = tn7;
tn6.left = tn8;
SerializationAndDe ss = new SerializationAndDe();
TreeNode r = ss.d(ss.s(tn1));
System.out.println(ss.sameTree(tn1, r));
TreeNode r2 = ss.d(ss.s(null));
System.out.println(ss.sameTree(null, r2));
return;
}
private boolean sameTree(TreeNode r1, TreeNode r2) {
if (r1 == null && r2 == null)
return true;
if (r1 != null && r2 != null && r1.val == r2.val)
return sameTree(r1.left, r2.left) && sameTree(r1.right, r2.right);
return false;
}
}