题解 | #序列化二叉树#
序列化二叉树
http://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
import java.util.ArrayList;
import java.util.List;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private int desIndex = 0; // 记录当前反序列化的下标
String Serialize(TreeNode root) {
List<String> result = new ArrayList<>();
if(root==null) return "{}";
ser(root, result);
return "{"+String.join(",", result)+"}";
}
/**
* 序列化
* @param node 当前序列化节点
* @param result 序列化结果集
*/
void ser(TreeNode node, List<String> result){
if(node==null){ // 当前节点是空节点
result.add("#");
return;
}
result.add(String.valueOf(node.val));
ser(node.left, result); // 序列化左子节点
ser(node.right, result);// 序列化右子节点
}
TreeNode Deserialize(String str) {
str = str.substring(1, str.length()-1); // 去除两边{}
if(str.isEmpty()) return null;
String[] nodes = str.split(","); // 按逗号分割
return des(nodes);
}
/**
* 继续反序列化节点
* @param nodes 节点列表
* @return 节点
*/
TreeNode des(String[] nodes){
String s = nodes[desIndex++]; // 获取当前节点数值
if(s.equals("#")) return null; // #代表为空节点
TreeNode cur = new TreeNode(Integer.parseInt(s)); // 生成节点
cur.left = des(nodes); // 反序列化左节点
cur.right = des(nodes); // 反序列化右节点
return cur;
}
}