剑指offer---4、序列化二叉树

一、总结

一句话总结:

1. 对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点不为空时,在转化val所得的字符之后添加一个' , '作为分割。对于空节点则以 '#' 代替。
2. 对于反序列化:按照前序顺序,递归的使用字符串中的字符创建一个二叉树

1、对一个二叉树序列化是什么意思?

序列化就是将对象或者数组转化为 字符串

2、php自带序列化和反序列化函数么(序列化二叉树)?

带的:serialize($pRoot); unserialize($s);
<?php

/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
function MySerialize($pRoot)
{
// write code here
return serialize($pRoot);
}
function MyDeserialize($s)
{
// write code here
return unserialize($s);
}

二、内容在总结中

1、题目描述

请实现两个函数,分别用来序列化和反序列化二叉树

 

2、代码

<?php

/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
function MySerialize($pRoot)
{
// write code here
return serialize($pRoot);
}
function MyDeserialize($s)
{
// write code here
return unserialize($s);
}
<?php

/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
function MySerialize($pRoot)
{
if($pRoot == null) return '#';
$arr = [];
preOrder($pRoot,$arr);
$str = $arr[0];
for($i=1;$i<count($arr);$i++)
$str = $str." ".$arr[$i];
return $str;
}
function preOrder($pRoot,&$arr){
if($pRoot == null){
$arr[] = '#';
return ;
}
$arr[] = $pRoot->val;
preOrder($pRoot->left,$arr);
preOrder($pRoot->right,$arr);
return ;
}
function MyDeserialize($s)
{
$i = -1;
$arr = explode(" ",$s);
return reconstruct($arr,$i); }
function reconstruct($arr,&$i){
$i++;
if($i >= count($arr))
return null;
if($arr[$i] == '#')
return null;
$node = new TreeNode($arr[$i]);
$node->left = reconstruct($arr,$i);
$node->right = reconstruct($arr,$i);
return $node;
}
 

最新文章

  1. Sort merge join、Nested loops、Hash join(三种连接类型)
  2. js中for in 和 for each in的用法和区别
  3. Salt官方将RHEL5/CentOS5 源
  4. 日志基本概念/rSyslog
  5. cf 383 D
  6. jq选取对象的方法
  7. java的装箱与拆箱
  8. Emit学习(1)-Emit概览
  9. Win32/MFC的基本概念
  10. ★MySQL一些很重要的SQL语句
  11. SCU 4438 Censor KMP/Hash
  12. 二叉树与AVL树
  13. Java-IO流之BufferedReader 和BufferedWriter的使用和原理
  14. 今天我得鼓吹一波 Kotlin
  15. Java中的堆内存设置对线程创建数的影响以及-Xss参数的记录
  16. Hexo站点之域名配置【2】
  17. Kinect2.0关节角度获取
  18. aarch64_g1
  19. Hibernate 性能优化一对一关联映射
  20. STL学习笔记(第二章 C++及其标准程序库简介)

热门文章

  1. tp 框架 -文件上传
  2. Unity shader with lightmap
  3. P2737 [USACO4.1]麦香牛块Beef McNuggets
  4. 奇异值分解基础(SVD)
  5. GeneXus笔记本——部分环境属性设置项
  6. smbcontrol - 向smbd或nmbd进程发送消息
  7. 二、Ajax请求MVC中数据查询表返回datatable
  8. Vue-选项卡切换
  9. mysql官网下载安装
  10. 【串线篇】Mybatis之SSM整合