1+ // 297. 二叉树的序列化与反序列化
2+
3+
4+ /**
5+ * Definition for a binary tree node.
6+ * public class TreeNode {
7+ * int val;
8+ * TreeNode left;
9+ * TreeNode right;
10+ * TreeNode(int x) { val = x; }
11+ * }
12+ */
13+
14+ // Your Codec object will be instantiated and called as such:
15+ // Codec ser = new Codec();
16+ // Codec deser = new Codec();
17+ // TreeNode ans = deser.deserialize(ser.serialize(root));
18+
19+
20+ /*
21+ 深度优先搜索:
22+ */
23+ public class Codec {
24+ public String serialize (TreeNode root ) {
25+ if (root == null ) {
26+ return "X," ;
27+ }
28+ String leftSerialize = serialize (root .left );
29+ String rightSerialize = serialize (root .right );
30+ return root .val + "," + leftSerialize + rightSerialize ;
31+ }
32+
33+ public TreeNode deserialize (String data ) {
34+ String [] splits = data .split ("," );
35+ Deque <String > queue = new LinkedList <>(Arrays .asList (splits ));
36+ return build (queue );
37+ }
38+
39+ private TreeNode build (Deque <String > queue ) {
40+ String s = queue .poll ();
41+ if (s .equals ("X" )) {
42+ return null ;
43+ }
44+ TreeNode node = new TreeNode (Integer .parseInt (s ));
45+ node .left = build (queue );
46+ node .right = build (queue );
47+ return node ;
48+ }
49+ }
50+
51+
52+ /*
53+ 广度优先搜索:
54+ */
55+ public class Codec {
56+ public String serialize (TreeNode root ) {
57+ if (root == null ) {
58+ return "X," ;
59+ }
60+ StringBuilder sb = new StringBuilder ();
61+ Queue <TreeNode > queue = new LinkedList <>();
62+ queue .add (root );
63+ while (!queue .isEmpty ()) {
64+ int size = queue .size ();
65+ while (size > 0 ) {
66+ TreeNode node = queue .poll ();
67+ if (node != null ) {
68+ sb .append (node .val + "," );
69+ queue .add (node .left );
70+ queue .add (node .right );
71+ } else {
72+ sb .append ("X," );
73+ }
74+ size --;
75+ }
76+ }
77+ return sb .toString ();
78+ }
79+
80+ public TreeNode deserialize (String data ) {
81+ if (data .equals ("X," )) {
82+ return null ;
83+ }
84+ String [] splits = data .split ("," );
85+ Deque <TreeNode > queue = new LinkedList <>();
86+ TreeNode root = new TreeNode (Integer .parseInt (splits [0 ]));
87+ queue .add (root );
88+ int i = 1 ;
89+ while (!queue .isEmpty ()) {
90+ TreeNode node = queue .poll ();
91+ if (!"X" .equals (splits [i ])) {
92+ TreeNode left = new TreeNode (Integer .parseInt (splits [i ]));
93+ node .left = left ;
94+ queue .add (left );
95+ }
96+ i ++;
97+ if (!"X" .equals (splits [i ])) {
98+ TreeNode right = new TreeNode (Integer .parseInt (splits [i ]));
99+ node .right = right ;
100+ queue .add (right );
101+ }
102+ i ++;
103+ }
104+ return root ;
105+ }
106+ }
0 commit comments