二叉树25:序列化二叉树
来源:互联网 发布:整治网络传销可丽金 编辑:程序博客网 时间:2024/05/16 18:52
题目:请实现两个函数,分别用来序列化和反序列化二叉树
思路:前面Tree4已经研究过了二叉树的序列化和反序列化问题,对于序列化和反序列化,默认就是使用先序遍历来进行的,且无论是空节点还是非空的结点都需要进行遍历,对于空节点通常标记位“#”,每个结点值的结束使用“,”来进行,OJ一般不使用“!”。
public class Solution { //使用递归先序遍历对二叉树进行序列化 String Serialize(TreeNode root) { //注意:Java中String是不可改变的,不能进行引用传递,改为使用StringBuffer StringBuilder res=new StringBuilder(""); //调用递归方法完成二叉树遍历序列化 this.preOrder(root,res); //返回结果 return res.toString(); } //递归方法,用来先序遍历二叉树同时将其序列化为字符串 private void preOrder(TreeNode root, StringBuilder str){ //递归结束的边界条件 if(root==null){ str.append("#,"); return; } //先遍历根结点 str.append(root.val+","); //遍历左子树 this.preOrder(root.left,str); //遍历右子树 this.preOrder(root.right,str); } //已知由先序遍历得到的字符串str,将其恢复为一棵二叉树,并返回根结点 TreeNode Deserialize(String str) { //特殊输入 if(str==null||str.length()<=0) return null; //将字符串按照","拆分为数组 String[] strs=str.split(","); //调用递归方法deSerializeCore()方法来实现重建二叉树的功能,返回根结点 TreeNode root=this.deSerializeCore(strs); //注意返回结果 return root; } //注意:这里关键是要设计一个成员变量index用于在每次递归调用时能够使用不同的字符串来建立根结点 int index=0;//设计一个递归方法deSerializeCore用于使用strs[]数组的后面部分元素来建立一棵二叉树,并返回根结点//递归方法可以有返回值或者没有返回值,不影响使用,如果有返回值要注意接收 private TreeNode deSerializeCore(String[] strs){ if("#".equals(strs[index])){ //如果遇到的是#表示空节点,不再建立子树,这个结点null就是子树的根结点返回 //千万注意,返回前要将index向下移动,之后使用的是strs[]中后面部分的元素 index++; return null; }else{ //如果不为空结点,则先恢复这个结点 TreeNode newNode=new TreeNode(0); newNode.val=Integer.parseInt(strs[index]); //千万注意在递归调用之前(使用了一个元素建立结点之后),要将index向后移动1位 index++; //恢复左子树 newNode.left=this.deSerializeCore(strs); //恢复右子树 newNode.right=this.deSerializeCore(strs); //建立二叉树完成,返回根结点 return newNode; } }}
0 0
- 二叉树25:序列化二叉树
- 二叉树序列化
- 二叉树序列化
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 二叉树序列化
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 原生如何检测变量是否是一个数组的几种方法
- ubuntu下安装FFMPEG步骤以及需要的各种压缩包
- 写给初学者28_android_Notification
- 游戏制作二
- hdu5241——Friends(找规律+大数幂)
- 二叉树25:序列化二叉树
- Java并发开篇
- 2015第六届山东省赛训练总结2017/4/29
- Eb/N0 and SNR
- 【java】OOM
- LVS:三种负载均衡方式比较
- Jquery Ajax操作
- C语言学习历程——Traing01整数算法训练01
- redux中的combineReducer学习