297.二叉树的序列化与反序列化 Java代码
This commit is contained in:
parent
7df9e1ba2f
commit
e5b1498cc1
|
@ -0,0 +1,135 @@
|
|||
package com.iqiaoxu.code;
|
||||
|
||||
import com.iqiaoxu.code.structure.TreeNode;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class Codec {
|
||||
private void serialize(TreeNode root, List<Integer> values) {
|
||||
if (root != null) {
|
||||
values.add(root.val);
|
||||
serialize(root.left, values);
|
||||
serialize(root.right, values);
|
||||
} else {
|
||||
values.add(Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
public String serialize(TreeNode root) {
|
||||
List<Integer> values = new LinkedList<>();
|
||||
serialize(root, values);
|
||||
char[] chars = new char[values.size() * 2];
|
||||
int i = 0;
|
||||
for (Integer v : values) {
|
||||
chars[i] = (char) ((v >>> 16) & 0xFFFF);
|
||||
chars[i + 1] = (char) (v & 0xFFFF);
|
||||
i += 2;
|
||||
}
|
||||
return new String(chars);
|
||||
}
|
||||
|
||||
private TreeNode deserialize(LinkedList<Integer> values) {
|
||||
Integer v = values.pop();
|
||||
if (v != Integer.MAX_VALUE) {
|
||||
TreeNode t = new TreeNode(v);
|
||||
t.left = deserialize(values);
|
||||
t.right = deserialize(values);
|
||||
return t;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public TreeNode deserialize(String data) {
|
||||
char[] chars = data.toCharArray();
|
||||
LinkedList<Integer> values = new LinkedList<>();
|
||||
for (int i = 0; i < chars.length; i += 2) {
|
||||
values.add(((chars[i] & 0xffff) << 16) | (chars[i + 1] & 0xffff));
|
||||
}
|
||||
return deserialize(values);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
TreeNode n1 = new TreeNode(1);
|
||||
TreeNode n2 = new TreeNode(2);
|
||||
TreeNode n3 = new TreeNode(3);
|
||||
TreeNode n4 = new TreeNode(4);
|
||||
TreeNode n5 = new TreeNode(5);
|
||||
n3.left = n4;
|
||||
n3.right = n5;
|
||||
n1.left = n2;
|
||||
n1.right = n3;
|
||||
List<Integer> values = new LinkedList<>();
|
||||
Codec codec = new Codec();
|
||||
codec.serialize(n1, values);
|
||||
System.out.println(values);
|
||||
|
||||
String s = codec.serialize(n1);
|
||||
System.out.println(s);
|
||||
TreeNode root = codec.deserialize(s);
|
||||
System.out.println(1);
|
||||
}
|
||||
/*private void serialize(TreeNode root, List<Integer> values) {
|
||||
if (root != null) {
|
||||
values.add(root.val);
|
||||
serialize(root.left, values);
|
||||
serialize(root.right, values);
|
||||
} else {
|
||||
values.add(0x7FFF);
|
||||
}
|
||||
}
|
||||
|
||||
public String serialize(TreeNode root) {
|
||||
List<Integer> values = new LinkedList<>();
|
||||
serialize(root, values);
|
||||
char[] chars = new char[values.size()];
|
||||
int i = 0;
|
||||
for (Integer v : values) {
|
||||
chars[i++] = (char) (v & 0xFFFF);
|
||||
}
|
||||
return new String(chars);
|
||||
}
|
||||
|
||||
private TreeNode deserialize(LinkedList<Integer> values) {
|
||||
Integer v = values.pop();
|
||||
if (v != 0x7FFF) {
|
||||
TreeNode t = new TreeNode(v > 0x7FFF ? v | 0xFFFF0000 : v);
|
||||
t.left = deserialize(values);
|
||||
t.right = deserialize(values);
|
||||
return t;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public TreeNode deserialize(String data) {
|
||||
char[] chars = data.toCharArray();
|
||||
LinkedList<Integer> values = new LinkedList<>();
|
||||
for (char c : chars) {
|
||||
values.add((int) c);
|
||||
}
|
||||
return deserialize(values);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
TreeNode n1 = new TreeNode(1);
|
||||
TreeNode n2 = new TreeNode(2);
|
||||
TreeNode n3 = new TreeNode(3);
|
||||
TreeNode n4 = new TreeNode(4);
|
||||
TreeNode n5 = new TreeNode(-100);
|
||||
n3.left = n4;
|
||||
n3.right = n5;
|
||||
n1.left = n2;
|
||||
n1.right = n3;
|
||||
List<Integer> values = new LinkedList<>();
|
||||
Codec codec = new Codec();
|
||||
codec.serialize(n1, values);
|
||||
System.out.println(values);
|
||||
|
||||
String s = codec.serialize(n1);
|
||||
System.out.println(s);
|
||||
TreeNode root = codec.deserialize(s);
|
||||
System.out.println(1);
|
||||
}*/
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package com.iqiaoxu.code.structure;
|
||||
|
||||
public class TreeNode {
|
||||
public int val;
|
||||
public TreeNode left;
|
||||
public TreeNode right;
|
||||
|
||||
public TreeNode(int x) {
|
||||
val = x;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue