序列化二叉树leetcode
来源:互联网 发布:珠海长隆 知乎 编辑:程序博客网 时间:2024/06/03 12:51
题目描述
请实现两个函数,分别用字符串来序列化和反序列化二叉树
解题过程:我设计的序列化过程是“值(左子树,右子树)”
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; }}
0 0
- 序列化二叉树leetcode
- 二叉树序列化
- 二叉树序列化
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 二叉树序列化
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 重置gitlab管理员密码
- ACL权限
- mac OS X下配置jdk环境变量
- Ajax动态滚动加载数据
- Android通知栏微技巧,那些你所没关注过的小细节
- 序列化二叉树leetcode
- OKHttp请求网络数据
- UILabel文字大小自适应之--SizeToFit
- Android ActionBar应用实战,高仿微信主界面的设计
- flex布局
- AFNetWorking一般用法(一)
- 后台下载微信js sdk上传的图片
- 详解强大的jQuery选择器之过滤选择器、表单选择器
- HBase Admin createTable 创建表