1. 题目描述
https://leetcode.cn/problems/serialize-and-deserialize-bst/
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。
设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。
编码的字符串应尽可能紧凑。
示例 1:
输入:root = [2,1,3]
输出:[2,1,3]
示例 2:
输入:root = []
输出:[]
提示:
- 树中节点数范围是 [0, 104]
- 0 <= Node.val <= 104
- 题目数据 保证 输入的树是一棵二叉搜索树。
2. 题解
2022-05-11 AC
- serialize: 序列化就是深度搜索, 拿到先序遍历的val数组, 题目要求返回字符串, 就implode一下, 反正等下能解析出数组就行
- deserialize: 反序列化就是挨个往树中插入节点
```php
<?php
/**
- Created by PhpStorm
- User: jtahstu
- Time: 2022/5/11 0:10
- Des: 449. 序列化和反序列化二叉搜索树
- https://leetcode.cn/problems/serialize-and-deserialize-bst/
- 设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。 */
//Definition for a binary tree node. class TreeNode { public $val = null; public $left = null; public $right = null;
function __construct($value)
{
$this->val = $value;
}
}
class Codec { public $items = [];
function __construct()
{
}
/**
* @param TreeNode $root
* @return String
*/
function serialize($root)
{
$this->dfs($root);
return implode(',', $this->items);
}
function dfs($root)
{
if ($root == null) {
return;
}
$this->dfs($root->left);
$this->dfs($root->right);
$this->items[] = $root->val;
}
/**
* @param String $data
* @return TreeNode
*/
function deserialize($data)
{
$items = explode(',', $data);
if (!$items) {
return new TreeNode(null);
}
$root = new TreeNode($items[0]);
for ($i = 1; $i < count($items); $i++) {
$this->insert($root, $items[$i]);
}
return $root;
}
function insert(&$root, $val)
{
if ($val < $root->val) {
if ($root->left == null) {
$root->left = new TreeNode($val);
} else {
$this->insert($root->left, $val);
}
} else {
if ($root->right == null) {
$root->right = new TreeNode($val);
} else {
$this->insert($root->right, $val);
}
}
}
}
/**
- Your Codec object will be instantiated and called as such:
- $ser = new Codec();
- $tree = $ser->serialize($param_1);
- $deser = new Codec();
- $ret = $deser->deserialize($tree);
- return $ret; */
//object(TreeNode)#8 (3) { //[“val”]=> // string(1) “2” //[“left”]=> // object(TreeNode)#9 (3) { // [“val”]=> // string(1) “1” //[“left”]=> // NULL // [“right”]=> // NULL // } // [“right”]=> // object(TreeNode)#10 (3) { // [“val”]=> // string(1) “3” //[“left”]=> // NULL // [“right”]=> // NULL // } //}
/**
- 执行用时:60 ms, 在所有 PHP 提交中击败了100.00%的用户
- 内存消耗:27.7 MB, 在所有 PHP 提交中击败了100.00%的用户
- 通过测试用例:62 / 62 */
$deser = new Codec(); $ret = $deser->deserialize(‘7,5,10,4,6,9,11’); $tree = $deser->serialize($ret); print_r($tree); print_r($ret); ```