【题目】

* 请实现两个函数,分别用来序列化和反序列化二叉树
* 1
/ \
2 3
/\ /\
4 5 6 7
*
* 序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,。
* 而反序列化的结果则是输出一棵二叉树。

 package com.exe7.offer;

 /**
* 请实现两个函数,分别用来序列化和反序列化二叉树
* 1
/ \
2 3
/\ /\
4 5 6 7
*
* 序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,。
* 而反序列化的结果则是输出一棵二叉树。
* @author WGS
*
*/
public class SerializeBiTree {
static class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
TreeNode next=null;
public TreeNode(int val){
this.val=val;
}
} //序列化 前序
public String serialize(TreeNode pRoot){ StringBuilder sb=new StringBuilder();
if(pRoot==null){
sb.append("#,");
return sb.toString();
}
sb.append(pRoot.val+",");
sb.append(serialize(pRoot.left));
sb.append(serialize(pRoot.right));
return sb.toString(); }
//反序列化 相当于创建二叉树的过程
int p=-1;
public TreeNode deSerialize(String strIn){
p++;
if(p>strIn.length())
return null;
String[] strArr=strIn.split(",");
TreeNode node=null;
if(!strArr[p].equals("#")){
node=new TreeNode(Integer.valueOf(strArr[p]));
node.left=deSerialize(strIn);
node.right=deSerialize(strIn);
}
return node; }
public void preOrder(TreeNode node){
if(node==null) return;
System.out.print(node.val+" ");
preOrder(node.left);
preOrder(node.right);
}
public static void main(String[] args) {
SerializeBiTree s=new SerializeBiTree(); //反序列化
String strIn=("1,2,#,#,3,4,#,7,#,#,5,#,#,");
TreeNode tempNode=s.deSerialize(strIn);
s.preOrder(tempNode);//前序遍历 System.out.println("------------------------");
//序列化 结果: 1,2,4,#,#,5,#,#,3,6,#,#,7,#,#,
/*
1
/ \
2 3
/\ /\
4 5 6 7
* */
TreeNode root=new TreeNode(1);
TreeNode node1=new TreeNode(2);
TreeNode node2=new TreeNode(3);
TreeNode node3=new TreeNode(4);
TreeNode node4=new TreeNode(5);
TreeNode node5=new TreeNode(6);
TreeNode node6=new TreeNode(7);
root.left=node1;//
root.right=node2;//
node1.left=node3;//
node1.right=node4;//
node2.left=node5;//
node2.right=node6;// String str=s.serialize(root);
System.out.println(str);
} }

剑指offer系列35----序列化二叉树的更多相关文章

  1. 剑指offer系列32-----对称二叉树的判断

    [题目]请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. package com.exe7.offer; /** * [题目]请实现一个函 ...

  2. 《剑指offer》:[62]序列化二叉树

    题目:请实现两个函数,分别来序列化和反序列化二叉树. 方案分析:我们知道通过二叉树的中序和任何一个前或者后续遍历都可以反序列化一棵二叉树,但是这样做有一个缺点就是,序列化的数据不能有重复的数据,否则会 ...

  3. 干货 | 剑指offer系列文章汇总

    下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现  剑指offer系列  始 剑指offer—灯管问题(1)  剑指offer—10人电梯(2)  ...

  4. 剑指Offer - 九度1521 - 二叉树的镜像

    剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...

  5. 剑指Offer - 九度1368 - 二叉树中和为某一值的路径

    剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...

  6. 剑指Offer - 九度1350 - 二叉树的深度

    剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...

  7. 剑指Offer:对称的二叉树【28】

    剑指Offer:对称的二叉树[28] 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目分析 Java题解 /* publi ...

  8. [剑指 Offer 28. 对称的二叉树]

    剑指 Offer 28. 对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / ...

  9. 剑指Offer(四):重建二叉树

    说明: 1.本系列是根据<剑指Offer>这个系列做的一个小笔记. 2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难. 3.刚开始准备刷LeetCode.LintCode ...

  10. 【Java】 剑指offer(28) 对称的二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它 ...

随机推荐

  1. Qt简介

    一.Qt与Qt Creator简介        Qt是一个跨平台应用程序和 UI 开发框架.使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序. ...

  2. ZOJ Problem Set - 3635

    题目大意 有n个从1..n标号的座位,按时间顺序给出每个客人来的时候是坐在第几个空座位,最后给若干个询问问第i号客人坐在哪里 分析 线段树+二分 // Fast Sequence Operations ...

  3. Jquery attr判断服务器单选按钮失败

    在项目中用 jquey的attr方法获取服务器控件的单选按钮checked属性会不成功, 单选选中改变,用attr获取不到最新的值,但是用 $("#rdbPartySend").i ...

  4. 开机流程与主引导分区(MBR)——鸟哥私房菜

    在前篇随笔中,已经谈到了CMOS与BIOS,CMOS是记录各项硬件参数(包括系统时间.设备的I/O地址.CPU的电压和频率等)且嵌入到主板上面的存储器,BIOS是一个写入到主板上的韧体(韧体是写入到硬 ...

  5. UVa 10935卡片游戏

    很简单的一个题目,就是队列的运用就可以了,就是注意一下1的时候的情况就可以了. #include<iostream> #include<queue> using namespa ...

  6. leetcode 152. Maximum Product Subarray --------- java

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  7. HDU5934 Bomb(2016杭州CCPC第二题)(强连通缩点)

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. JS 索引数组、关联数组和静态数组、动态数组

    JS 索引数组.关联数组和静态数组.动态数组 数组分类: 1.从数组的下标分为索引数组.关联数组 var ary1 = [1,3,5,8]; //按索引去取数组元素,从0开始(当然某些语言实现从1开始 ...

  9. Java中相等测试

    一:equals与==的区别 (1)基本数据类型 byte,short,char,int,long,float,double,boolean 此类数据类型的比较需要使用==,此时比较的是他们的值,若相 ...

  10. 对CSS居中的一点总结

    在学习前端的过程中,发现元素和文本的水平居中和垂直居中,是经常会出现的问题,在实际工作中也会经常碰到.居中的技巧有很多,但在编写代码的过程中,发现有时候技巧管用,有时候不管用,于是就将每个知道的方案都 ...