/*
*请实现两个函数,分别用来序列化和反序列化二叉树
*注:这里采用的是前序遍历的方式
*/
public class SerializeBinaryTree {
String Serialize(TreeNode root) {
if(root == null)
return "";
StringBuilder sb = new StringBuilder(); //与StringBuffer区别:StringBuilder线程不安全,而StringBuffer线程安全
Serialize2(root, sb);
return sb.toString();
}
void Serialize2(TreeNode root, StringBuilder sb) {
if(root == null) {
sb.append("#,");
return;
}
sb.append(root.val + ",");
//sb.append(',');
Serialize2(root.left, sb);
Serialize2(root.right, sb);
}
int index = -1;
TreeNode Deserialize(String str) {
if(str.length() == 0)
return null;
String[] strs = str.split(",");
return Deserialize2(strs);
}
TreeNode Deserialize2(String[] strs) {
index ++;
if(!strs[index].equals("#")) { //值比较,非对象比较
TreeNode root = new TreeNode(0);
root.val = Integer.parseInt(strs[index]);
root.left = Deserialize2(strs);
root.right = Deserialize2(strs);
return root;
}
return null;
}
public static void main(String[] args) {
TreeNode root1 = new TreeNode(1);
root1.left = new TreeNode(2);
root1.right = new TreeNode(3);
root1.left.left = new TreeNode(4);
root1.left.right = new TreeNode(5);
root1.right.left = new TreeNode(6);
root1.right.right = new TreeNode(7);
String str = new SerializeBinaryTree().Serialize(root1);
TreeNode node = new SerializeBinaryTree().Deserialize(str);
System.out.println(str);
System.out.println(node.left.val + " " + node.right.val);
}
}
《剑指offer》-序列化和反序列化二叉树
最新推荐文章于 2024-07-18 18:08:02 发布