[剑指offer] 序列化二叉树

题目内容

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

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84?tpId=13&tqId=11214&tPage=4&rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking


题目思路

首先这道题目是要有两个问题,第一个是把一棵二叉树按照前序遍历的方式变成一个字符串。第二个是把一个字符串变成一个二叉树。对于第一个问题来说,我们要对这棵树进行一个前序遍历,按照中左右的方式放入列表中,如果节点为空,则插入#,最后.join(,)来实现列表到字符串的转换。第二个问题是我们采用了递归的方式来建立二叉树,分别是根节点,左节点和右节点,符合前序二叉树的简历方式,最后返回根节点即可。


程序代码

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Serialize(self, root):
        # write code here
        res=[]
        def preorder(root):
            if not root:#空节点
                res.append('#')
            else:
                res.append(str(root.val))
                preorder(root.left)
                preorder(root.right)
        preorder(root)
        return ','.join(res)
    def Deserialize(self, s):
        # write code here
        res=s.split(',')
        def build():
            if res:
                tmp=res.pop(0)
                if tmp=='#':
                    return None
                else:
                    root=TreeNode(int(tmp))
                    root.left=build()
                    root.right=build()
            return root
        return build()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值