目录
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树。
测试用例
- 功能测试(输入的二叉树是完全二叉树;所有节点都没有左/右子树的二叉树;只有一个节点的二叉树;所有节点的值都相同的二叉树)
- 特殊输入测试(指向二叉树根节点的指针为空指针)
题目考点
- 考察应聘者分析复杂问题的能力。
- 考察应聘者对二叉树遍历的理解及编程能力。
解题思路
1、确定序列化规则
2、如果我们根据前序遍历进行序列化,那么我们只要根据前序遍历解序列化就可以啦!!
自己解题
什么鬼?
参考解题
不是很懂,什么鬼啊,还是递归的东西,需要画图再理解。
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
int index;
String Serialize(TreeNode root) {
if(root == null){
return "$,";
}
return root.val + "," + Serialize(root.left) + Serialize(root.right);
}
TreeNode Deserialize(String str) {
// 反序列化
if(str == null || str.length() == 0){
return null;
}
index = -1;
String[] strNode = str.split(",");
return DeserializeCore(strNode);
}
TreeNode DeserializeCore(String[] strNode){
index++;
TreeNode treeNode = null;
if(! strNode[index].equals("$")){
treeNode = new TreeNode(Integer.valueOf(strNode[index]));
treeNode.left = DeserializeCore(strNode);
treeNode.right = DeserializeCore(strNode);
}
return treeNode;
}
}