题目描述
请实现两个函数,分别用字符串来序列化和反序列化二叉树
解题过程:我设计的序列化过程是“值(左子树,右子树)”
import java.util.Stack;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
String Serialize(TreeNode root) {
if(root==null) return "#";
String left=Serialize(root.left);
String right=Serialize(root.right);
return root.val+"("+left+","+right+")";
}
TreeNode Deserialize(String str) {
if(str==null||str.equals("#")) return null;
char[] c=str.toCharArray();
int s=0,i=0,count=0,sum=0,len=c.length;
while(s<len&&c[s]>='0'&&c[s]<='9') { sum=sum*10+(c[s]-'0'); s++;}
i=s+1;
// System.out.println(str+"length:"+c.length+"---sum:"+sum);
TreeNode node=new TreeNode(sum);
TreeNode left,right;
if(s>=len) return node;
if(c[s]=='#'){ return null;}
//System.out.println("--------------");
if(s<len&&c[++s]=='#'){ left=null;s++;}
else {
count=1;
while(s<len&&c[s]!='('){
if(c[s]==','){
count=0;
s--;
break;
}
s++;
}
s++;
while(s<len&&count!=0){
if(c[s]=='(')count++;
if(c[s]==')')count--;
s++;
}
// System.out.println("end:"+s+"---str:"+str.substring(i,s));
left=Deserialize(str.substring(i,s));
}
// System.out.println("right:"+(s+1)+"---str:"+str.substring(s+1,str.length()-1));
right=Deserialize(str.substring(s+1,str.length()-1));
node.left=left;
node.right=right;
return node;
}
}