前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >剑指offer 序列化二叉树

剑指offer 序列化二叉树

作者头像
week
发布于 2019-04-01 06:49:19
发布于 2019-04-01 06:49:19
36400
代码可运行
举报
文章被收录于专栏:用户画像用户画像
运行总次数:0
代码可运行

题目描述

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

思路

二叉树的序列化就是按照某种顺序遍历二叉树,遇到空结点是在遍历输出序列中  加入某个特殊字符进行标识,反序列化就是按照同样的规则将一个序列还原为一颗二叉树。  这里采用前序遍历的顺序进行序列化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Serialize(self, root):
        valuelist = []
        self.preorder(root, valuelist)
        # 将结点值序列转化为一个字符串
        return ','.join(map(str, valuelist))

    def preorder(self, root, valuelist):
        if not root:
            # 对于空结点,返回#字符加以标识
            valuelist.append('#')
            return None
        valuelist.append(root.val)
        self.preorder(root.left, valuelist)
        self.preorder(root.right, valuelist)

    # write code here
    def Deserialize(self, s):
        valuelist = s.split(',')
        root = self.preorderdes(valuelist)
        return root

    def preorderdes(self, valuelist):
        if len(valuelist) == 0 or valuelist[0] == '':
            return None
        # 遇到#字符,直接删除,返回空结点
        if valuelist[0] == '#':
            del valuelist[0]
            return None
        root = TreeNode(int(valuelist[0]))
        del valuelist[0]
        root.left = self.preorderdes(valuelist)
        root.right = self.preorderdes(valuelist)
        return root
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年03月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
剑指offer【30~39】
除了存储数据的栈 stack,再定义一个最小栈 minstack。minstack 的长度和 stack 保持同步,只不过其是一个递减栈。如 stack = [6,7,4,5,3,8],则 minstack = [6,6,4,4,3,3]。这样,在 pop 的时候,同时 pop 两个栈,不会因为删除最小值而在 minstack 中找不到。
echobingo
2019/12/20
3990
Python算法——树的序列化与反序列化
树的序列化与反序列化是指将树结构转换为字符串表示(序列化),以及将字符串表示还原为原始树结构(反序列化)。在本文中,我们将深入讨论如何实现树的序列化与反序列化算法,提供Python代码实现,并详细说明算法的原理和步骤。
Echo_Wish
2023/11/30
2900
【python刷题】二叉树
结果: 先序遍历: [1, 2, 4, 5, 3, 6, 7] 中序遍历: [4, 2, 5, 1, 6, 3, 7] 后序遍历: [4, 5, 2, 6, 7, 3, 1] 层次遍历: [[1], [2, 3], [4, 5, 6, 7]]
西西嘛呦
2021/01/18
3350
[剑指offer] 序列化二叉树
原文地址: https://weiweiblog.cn/serialize/
尾尾部落
2018/09/04
6330
【LeetCode】一文详解二叉树的三大遍历:前序、中序和后序(python和C++实现)
本文主要包括利用递归和栈的方法实现二叉树的前序、中序、后序遍历! 144. 二叉树的前序遍历 给定一个二叉树,返回它的 前序遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 解题思路 1.1 树的前序遍历--非递归方法(栈) 因为先访问根节点,所以直接将root的val放入答案(ans)容器 利用stack来储存root。 当左子树遍历完后,取出root接着遍历右子树。 C++实现: /** * Definition
深度学习技术前沿公众号博主
2020/05/18
9350
LeetCode-面试题37-序列化二叉树
注意:递归序列化出来的序列和队列方式结果不同,递归返回的列表数据更像DFS遍历的结果,虽然两者序列化和反序列化的方式不同,但不影响构建结果。即怎么序列化,就怎么反序列化
benym
2022/07/14
1880
搜索二叉树、完全二叉树
给定一棵二叉树,已经其中没有重复值的节点,请判断该二叉树是否为搜索二叉树和完全二叉树。
ruochen
2021/11/26
7720
剑指Offer(六十一)-- 序列化二叉树
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 !表示一个结点值的结束(value!)。
秦怀杂货店
2022/02/15
2210
剑指Offer(六十一)-- 序列化二叉树
LintCode-7二叉树的序列化和反序列化
设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。
悠扬前奏
2019/05/28
6260
Python算法——树的重建
树的重建(Tree Reconstruction)是一种从给定的遍历序列中恢复原树结构的算法。在本文中,我们将讨论树的重建问题以及常见的重建算法,包括先序遍历和中序遍历序列重建二叉树,以及层序遍历序列重建二叉树。我们将提供Python代码实现,并详细说明每个算法的原理和步骤。
Echo_Wish
2023/11/30
2330
数据结构高频面试题-树
本系列针对面试中【经典】数据结构类算法题进行分类和汇总,每篇讲解一种数据结构的高频面试题。本篇的主角是树。 本文结构: 1. 面试前必须知道的[树]的基础知识。 2. [树]的经典手写编程题。 基础知
小萌哥
2020/07/20
6260
【LeetCode系列】从中序与后序遍历序列构造二叉树 & 从前序与中序遍历序列构造二叉树
前序遍历是根左右,因此preorder第一个元素一定是整个树的根。由于题目说明了没有重复元素,因此我们可以通过preorder[0]去inorder找到根在inorder中的索引pos。
深度学习技术前沿公众号博主
2020/05/28
4780
【2025-03-02】基础算法:二叉树 相同 对称 平衡 右视图
📝前言说明: ●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,主要跟随B站博主灵茶山的视频进行学习,专栏中的每一篇文章对应B站博主灵茶山的一个视频 ●题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。 ●文章中的理解仅为个人理解。 ●文章中的截图来源于B站博主灵茶山,如有侵权请告知。
用户11029137
2025/03/03
540
【2025-03-02】基础算法:二叉树 相同 对称 平衡 右视图
七十七、 二叉树的层次遍历和最大深度
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。
润森
2022/08/17
5440
七十七、 二叉树的层次遍历和最大深度
二叉树的题,就那几个框架,枯燥至极🤔
JSON 的运用非常广泛,比如我们经常将变成语言中的结构体序列化成 JSON 字符串,存入缓存或者通过网络发送给远端服务,消费者接受 JSON 字符串然后进行反序列化,就可以得到原始数据了。这就是「序列化」和「反序列化」的目的,以某种固定格式组织字符串,使得数据可以独立于编程语言。
labuladong
2021/09/23
4480
每天一道剑指offer-序列化二叉树
怎么序列化的,就怎么反序列化。这里 deserialize反序列化时对于序列化到 String[]arr的哪个结点值来了的变量 index有两个坑(都是笔者亲自踩的):
乔戈里
2019/03/04
3130
一文搞定二叉树遍历
大家好,这是Brush the topic的第一章节,BinaryTree。首先我说一下为什么把这个放在刷题的第一节呢?
PayneWu
2020/12/18
2750
Python算法——二叉树遍历
二叉树是一种常见的树状数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。遍历二叉树是访问树的所有节点并按照特定顺序输出它们的过程。在本文中,我们将讨论二叉树的三种主要遍历算法:前序遍历、中序遍历和后序遍历,并提供相应的Python代码实现。
Echo_Wish
2023/11/30
5850
二叉树的右视图 python_【Python数据结构5】Binary Search Tree
return [] if (root is None) else self.InOrder(root.left) + [root.val] + self.InOrder(root.right)
Java架构师必看
2021/08/23
2440
LeetCode 二叉树系统题解
TIPS:前中后序遍历区别在于三字中的中间那个字,前、中、后序分别对应左、根、右。
Yano_nankai
2019/11/10
9810
LeetCode 二叉树系统题解
相关推荐
剑指offer【30~39】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验