数据结构与算法Python版-第九周作业

1. 二叉树复原(10分)

题目内容:
给定一种序列化二叉树的方式:从根节点起始按层次遍历二叉树所有“可能”存在节点的位置:若该位置存在节点,则输出节点值,并在下一层相应增加两个可用位置;否则输出None,且不增加下一层的可用位置。
例如"[5, 4, 7, 3, None, 2, None, -1, None, 9]"是下图所示的二叉树序列化的结果:
在这里插入图片描述
其中红色箭头对所有的None进行了标记。
现给出一个二叉树以这种形式序列化的结果,请复原该二叉树并给出它的中序遍历。

输入格式:
一行合法的Python表达式,可解析为包含整数与None的列表

输出格式:
二叉树中序遍历的整数序列,以空格分隔

输入样例:
[5, 4, 7, 3, None, 2, None, -1, None, 9]

输出样例:
-1 3 4 5 9 2 7

输入样例2:
[5,1,4,None,None,3,6]

输出样例2:
1 5 3 4 6

注:树结构如图(红色箭头对None的对应位置进行了标记):
在这里插入图片描述

参考代码模板:

def seq2tree(seq):
    # 将列表反序列化为树
    pass

def inorderTree(root):
    # 中序遍历树
    pass

lst = eval(input())
tree = seq2tree(lst)
inorder = inorderTree(tree)
print(inorder) # 请自行确定打印方式

时间限制:500ms内存限制:32000kb

# 首先是自己定义的二叉树,注意,此处二叉树的定义直接影响后面的代码
# 将自己定义的二叉树保存后就可以直接import了
# 如果import其他的module里面的二叉树,下面的代码需要根据情况修改
class BinaryTree:
    def __init__(self, rootObj):
        self.key = rootObj
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self, newNode):
        if self.leftChild == None:
            self.leftChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t

    def insertRight(self, newNode):
        if self.rightChild == None:
            self.rightChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值