Tree Serialization
树的序列化与反序列化
问题描述
实现二叉树的序列化和反序列化:
- 序列化:将一个给定的二叉树用一个序列表示,空结点用 # 表示。
- 反序列化:给定一个序列化的二叉树,重建该二叉树。
测试样例
# 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