二叉树的OJ输入反序列化,Python实现

二叉树的OJ输入反序列化,Python实现

1.配置环境

使用环境:python3.7
平台:Windows10
IDE:PyCharm

2.博客由来

博主在做笔试时遇到过关于二叉树的题目,题目中给定的二叉树输入是字符串输入,博主在数据转换上花费了不少功夫,特此记录

3.问题描述

将下列字符串表述的二叉树转化为链式储存的二叉树,其中字符串中元素为二叉树的层序排列,对于不存在的节点用None表示。

实例:

input:"[1,4,3,1,None,2,4,None,None,None,None,1,None,None,5]"

表示的二叉树为:
在这里插入图片描述

4.问题解决

老样子,先直接上代码:

# author:Hurricane
# date:  2022/4/5
# E-mail:hurri_cane@qq.com


from collections import deque


class Tree_node:
	def __init__(self, value):
		self.val = value
		self.left = None
		self.right = None


class Solution:
	def deserialize(self, data):
		if data == "[]":
			return None
		nums = data[1:-1].split(",")
		root = Tree_node(float(nums[0]))
		que = deque([root])
		i = 1
		while que and i < len(nums):
			node = que.popleft()
			if node:
				if nums[i] != "None":
					node.left = Tree_node(float(nums[i]))
				que.append(node.left)
				i += 1
				if nums[i] != "None":
					node.right = Tree_node(float(nums[i]))
				que.append(node.right)
				i += 1
			else:
				i += 2
				que.append(None)
				que.append(None)
		return root


if __name__ == '__main__':
	Solution_result = Solution()
	deserialize_result = Solution_result.deserialize("[1,4,3,1,None,2,4,None,None,None,None,1,None,None,5]")
	print("Deserialize Result:", deserialize_result)

思路:
通过指针(代码中为i)遍历序列化输入,采用一个队列来实现对子节点不断添加元素处理。
值得注意的是,由于空节点的子节点(也是空节点)在序列化输入上也占据了一个位置,即None,所以我们维护的队列中需要存储进去空节点,并且对空节点需要进行指针i后移两位的操作。

5.结束语

如果本文对你有帮助的话还请点赞、收藏一键带走哦,你的支持是我最大的动力!(づ。◕ᴗᴗ◕。)づ
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hurri_cane

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值