栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

PTA 浪漫侧影 Python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PTA 浪漫侧影 Python

前置知识:

对于不一定是完全二叉树,根据已知的中序+后序(前序)遍历顺序来建树(ps:中序一定是需要的)

参考大佬博客:已知中序和前序(或后序)遍历结果生成树_勿忘初心丶的博客-CSDN博客_已知中序序列和后序序列

解题思路:

对于树的每一层,最左端的对应着左侧影,最右端对应着右侧影。

因此也不需要建树,只需要把每一层的元素存在一个数组 arr 中,左侧影为arr[0],右侧影为 arr[-1]。

例如题目中的arr存放的数据为:[[1],[6,2],[7,3],[8,4],[5]]

那么我们就可以自行理解一下,左侧影1,6,7,8,5,右侧影1,2,3,4,5了......

题目:

我们将二叉树的“侧影”定义为从一侧能看到的所有结点从上到下形成的序列。例如下图这棵二叉树,其右视图就是 { 1, 2, 3, 4, 5 },左视图就是 { 1, 6, 7, 8, 5 }。

于是让我们首先通过一棵二叉树的中序遍历序列和后序遍历序列构建出一棵树,然后你要输出这棵树的左视图和右视图。

输入格式:

输入第一行给出一个正整数 N (≤20),为树中的结点个数。随后在两行中先后给出树的中序遍历和后序遍历序列。树中所有键值都不相同,其数值大小无关紧要,都不超过 int 的范围。

输出格式:

第一行输出右视图,第二行输出左视图,格式如样例所示。

输入样例:

8 6 8 7 4 5 1 3 2

8 5 4 7 6 3 2 1

输出样例:

R: 1 2 3 4 5

L: 1 6 7 8 5

AC代码:
def build(mid,behind,line,len_mid):
    global arr
    element = behind.pop()
    arr[line].append(element)
    index = mid.index(element)
    if index<=1:
        for i in range(index):arr[line+1].append(mid[i])
    else:build(mid[:index],behind[:index],line+1,index)
    if len_mid - index -1 <=1:
        for i in range(len_mid-index-1):arr[line+1].append(mid[index+1+i])
    else:build(mid[index+1:],behind[index:],line+1,len_mid-index-1)


n = int(input())
arr = [[] for i in range(n)]
mid = list(map(int,input().split()))
behind = list(map(int,input().split()))
build(mid,behind,0,n)
beh = 'R: '
pre = 'L: '
for i in range(n):
    if arr[i]:
        beh += str(arr[i][-1])+' '
        pre += str(arr[i][0])+' '
    else:break
print(beh[:-1])
print(pre[:-1])

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/829790.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号