剑指offer系列35----序列化二叉树

时间:2022-12-22 13:48:08

【题目】

* 请实现两个函数,分别用来序列化和反序列化二叉树
* 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&lpar;28&rpar; 对称的二叉树

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

随机推荐

  1. SQL入门语句之CREATE

    一.CREATE DATABASE语句 1.创建一个SQL数据库 CREATE DATABASE database_name 二.CREATE TABLE语句 1.只创建字段和相对应的数据类型 cre ...

  2. 使用SerialPort&&num;160&semi;读取外置GPS信息和使用GeoCoordinateWatcher获取内置gps的信息

    简介最近工作中需要读取gps设备的信息,平板本身有内置的gps设备,但是精度不够,就又添加了一个外置的gps.对于外置的gps,我们主要通过SerialPort类来获得串口的信息,然后对接收到的内容进 ...

  3. IIS 7&period;5 高并发参数配置

    IIS 7.5 高并发参数配置 由于之前使用的是默认配置,服务器最多只能处理5000个同时请求,对于高并发请求,参照文档设置10万并发 1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为 ...

  4. Javascript 笔记与总结(2-4)Javascript 内置对象

    ① String 字符串对象 fromCharCode() 静态方法, 用作为参数而传递的字符代码创建一个新的字符串. length 字符串的长度. charAt() 抽取字符串中指定位置的字符. c ...

  5. nginx&plus;keepalived双主高可用负载均衡

    实验环境及软件版本:CentOS版本: 6.6(2.6.32.-504.el6.x86_64)nginx版本: nginx-1.6.3keepalived版本:keepalived-1.2.7 主LB ...

  6. JQUERY1&period;9学习笔记 之属性选择器&lpar;二&rpar; 包含选择器

    jQuery("[attribute*='value']") 描述:选择所有与给定值匹配的属性值的标签. 例:找出所有name属性包含"man"的input标签 ...

  7. Java递归:一个NB自慰的操作

    递归的核心思想:自身调用自身 示例一:求5的阶乘 常规方法: 使用while循环 1 public class Demo01 { 2 3 public static void main(String[ ...

  8. CSS day49

    前端基础之CSS CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CS ...

  9. 4698&period; &lbrack;SDOI2008&rsqb;Sandy的卡片【后缀数组】

    Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积 攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记, ...

  10. larave框架的安装

    (1)中文官网:http://www.golaravel.com/ (2)composer下载与安装 1:composer网址:getcomposer.org 2:windows下载Composer- ...