package java_jianzhioffer_algorithm;
/**
* 题目:请实现两个函数,分别用来序列化和反序列化二叉树
* @author hexiaoli
* 思考:
* 1)序列化,节点为空用“#,”表示,采用先序遍历
* 2)反序列化,用字符串进行划分
*/
class TreeNodesd {
int val = 0;
TreeNodesd left = null;
TreeNodesd right = null;
public TreeNodesd(int val) {
this.val = val;
}
}
public class Serialize_Deserialize {
public static String serialize(TreeNodesd root) {
StringBuilder sb = new StringBuilder();
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();
}
static int index = -1; //计数变量,递归方式
public static TreeNodesd deserialize(String str) {
index++;
String[] strr =str.split(",");
TreeNodesd node =null;
if(!strr[index].equals("#")) {
node = new TreeNodesd(Integer.valueOf(strr[index]));
node.left=deserialize(str);
node.right=deserialize(str);
}
return node;
}
public static void main(String[] args) {
TreeNodesd root = new TreeNodesd(1);
TreeNodesd node1 = new TreeNodesd(2);
TreeNodesd node2 = new TreeNodesd(3);
TreeNodesd node3 = new TreeNodesd(4);
TreeNodesd node4 = new TreeNodesd(5);
root.left = node1;
root.right=node2;
node1.left=node3;
node2.right=node4;
String str ;
str=serialize(root);
System.out.println(str);
TreeNodesd temp ;
temp=deserialize(str);
System.out.println(temp.val);
}
}
剑指offer(61)序列化二叉树
猜你喜欢
转载自blog.csdn.net/hxl0925/article/details/90633404
今日推荐
周排行