今天延续上一章的内容,反序列化一棵树。
题目介绍
给定一个序列化后的字符串,反序列化为一棵树,例如:
You may deserialize the following string:
"[1,2,3,null,null,4,5]"
as
1
/ \
2 3
/ \
4 5
实现思路
反序列化的实现相比序列化简单点,整个过程如下:
1、先将字符串去除头尾的"["和"]",然后将字符串转换为数组。
2、遍历数组,从下标为0开始,逐步生成子节点。
实现代码
public class SolutionCodec {
public TreeNode deserialize(String data) {
if (data.indexOf("[") != 0 || data.indexOf("]") != data.length() - 1) {
return null;
}
String[] arr = data.substring(1, data.length() - 1).split(",");
if (arr != null && arr.length > 0) {
return buildTreeNode(arr, 0);
}
return null;
}
private TreeNode buildTreeNode(String[] arr, int index) {
TreeNode node = buildTreeNode(arr[index]);
if (null != node) {
int leftIndex = 2 * index + 1;
if (leftIndex < arr.length) {
node.left = buildTreeNode(arr, leftIndex);
}
int rIndex = 2 * (index + 1);
if (rIndex < arr.length) {
node.right = buildTreeNode(arr, rIndex);
}
}
return node;
}
private TreeNode buildTreeNode(String valStr) {
if (null == valStr || "".equals(valStr) || "null".equals(valStr)) {
return null;
}
int val = Integer.valueOf(valStr);
return new TreeNode(val);
}
}
算法相关实现源码地址:https://github.com/xiekq/rubs-algorithms
不知不觉中数据结构相关的文章写了差不多30篇了,突然发现虽然题目做了,内容也发了,但是真正框架性的知识还没有什么头绪。
认真总结思考后觉得是对相关算法知识的总结不足,同时学习的真正驱动力不足。后续的内容会对自己由更高的要求,输出真正的质量文章。