public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
if (root == null) {
return "";
}
StringBuilder sb = new StringBuilder();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node != null) {
queue.add(node.left);
queue.add(node.right);
sb.append(node.val + ",");
} else {
sb.append("null,");
}
}
return sb.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if (data == null || data.length() < 1) {
return null;
}
String[] nodes = data.split(",");
Queue<TreeNode> queue = new LinkedList<TreeNode>();
TreeNode root = new TreeNode(Integer.parseInt(nodes[0]));
queue.add(root);
int i = 1;
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (!nodes[i].equals("null")) {
TreeNode left = new TreeNode(Integer.parseInt(nodes[i]));
node.left = left;
queue.add(left);
}
i++;
if (!nodes[i].equals("null")) {
TreeNode right = new TreeNode(Integer.parseInt(nodes[i]));
node.right = right;
queue.add(right);
}
i++;
}
return root;
}
}
public class Codec {
public String serialize(TreeNode root) {
if (root==null){
return "";
}
String res = "";
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node=queue.poll();
if(node==null){
res=res+"Null,";
}else{
res=res+String.valueOf(node.val)+",";
if (node.left!=null){
queue.add(node.left);
}else {
queue.add(null);
}
if (node.right!=null){
queue.add(node.right);
}else {
queue.add(null);
}
}
}
}
return res.substring(0,res.length()-1);
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if (data ==null || data.length()==0){
return null;
}
String[] s = data.split(",");
TreeNode root = new TreeNode(Integer.valueOf(s[0]));
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int i = 1;
while (queue!=null && i<s.length){
TreeNode node = queue.poll();
if (!s[i].equals("Null")){
TreeNode node1 = new TreeNode(Integer.valueOf(s[i]));
node.left=node1;
queue.add(node1);
}
if (!s[i+1].equals("Null")){
TreeNode node2 = new TreeNode(Integer.valueOf(s[i+1]));
node.right=node2;
queue.add(node2);
}
i=i+2;
}
return root;
}
}
public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
if(root == null) {
return ",null";
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
StringBuilder sb = new StringBuilder();
while (!queue.isEmpty()) {
TreeNode p = queue.poll();
if (p == null) {
sb.append(",null");
continue;
}
sb.append("," + p.val);
queue.add(p.left);
queue.add(p.right);
}
return sb.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
String[] strArray = data.split(",");
if (strArray.length <= 2) {
return null;
}
TreeNode root = new TreeNode(Integer.parseInt(strArray[1]));
TreeNode p = null;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int sum = -1;
for (int i = 2; i < strArray.length; i++) {
if (sum == -1) {
p = queue.poll();
sum = 1;
}
TreeNode temp = null;
if (!strArray[i].equals("null")) {
temp = new TreeNode(Integer.parseInt(strArray[i]));
queue.add(temp);
}
if (sum == 1) {
p.left = temp;
} else {
p.right = temp;
}
sum--;
}
return root;
}
}
共以下 7 个回答
先序深度优先遍历序列化
层序遍历保存,再按顺序构建
按层次遍历以存储val为字符串,val之间使用逗号分隔;
通过stringstreamp配合getline函数分割字符串,使用队列存储当前需要建立左右子树的节点
层序遍历编码,解码的时候,使用一个辅助队列来存储非null节点。依次赋值队首元素的左右孩子
层次遍历