二叉树的(反)序列化

Tree Serialization

树的序列化与反序列化

问题描述
实现二叉树的序列化和反序列化:

  1. 序列化:将一个给定的二叉树用一个序列表示,空结点用 # 表示。
  2. 反序列化:给定一个序列化的二叉树,重建该二叉树。

测试样例

# Input: 
     1
    / \
   3   4
  / \   \
 2   5   7
# Output:
1 3 2 # # 5 # # 4 # 7 # #
# Input: 
1 3 2 # # 5 # # 4 # 7 # #
# Output:
132547
# 前序遍历输出树
#      1
#     / \
#    3   4
#   / \   \
#  2   5   7

内容首发于微信公众号IT信息教室,如果您想学习更多AI相关的技能,欢迎搜索关注或微信扫描下方二维码关注~~

在这里插入图片描述

参考代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Node class
class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
        
    # 定义以树的前序遍历的方式输出树。
    def __str__(self):
        preOrder = ''
        preOrder += str(self.value)
        if self.left:
            preOrder += str(self.left)
        if self.right:
            preOrder += str(self.right)
        return preOrder
        
#前序遍历输出树的结点,#表示该结点为空。
def serialize(tree):
    if tree is None:
        return '#'
    return '{} {} {}'.format(tree.value, serialize(tree.left), serialize(tree.right))

def deserialize(string):
    def helper():
        value = next(values)
        if value == '#':
            return None
        node = Node(int(value))
        node.left = helper()
        node.right = helper()
        return node
    values = iter(string.split())
    return helper()

# Test Program
#     1
#     / \
#   3   4
#   / \   \
# 2   5   7
tree = Node(1)
tree.left = Node(3)
tree.left.left = Node(2)
tree.left.right = Node(5)
tree.right = Node(4)
tree.right.right = Node(7)

print(serialize(tree))
# 1 3 2 # # 5 # # 4 # 7 # #
print(deserialize('1 3 2 # # 5 # # 4 # 7 # #'))
# 132547
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值