定义:
序列化二叉树是指将二叉树按某种规则转化为可存储的字符串;反序列化即将字符串重新表示为二叉树的形式。这里采用先序遍历的方式。
代码:
/*
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
class Solution {
int index = -1;
//StringBuffer sb = new StringBuffer();
String Serialize(TreeNode root) {
StringBuffer sb = new StringBuffer();
if (root == null) {
sb.append("#,");
return sb.toString();
}
sb.append(root.val + ",");
sb.append(Serialize(root.left));
sb.append(Serialize(root.right));
return sb.toString();
}
TreeNode Deserialize(String str) {
String[] s = str.split(",");
index++;
if (index >= s.length) {
return null;
}
TreeNode root = null;
if (!"#".equals(s[index])) {
root = new TreeNode(Integer.parseInt(s[index]));
root.left = Deserialize(str);
root.right = Deserialize(str);
}
return root;
}
}
遇到的问题:把StringBuffer sb = new StringBuffer()放在序列化方法外会发生错误。
原因:所有的递归共同拥有一个sb,递归返回的时候会返回全部,而不是后面的一截,即会发生重复append元素的情况,故发生错误,具体的用一个例子模拟一下就明白了。
参考博文:https://blog.csdn.net/qq_36771269/article/details/79522511