L2-006 树的遍历 Python 团体程序设计天梯赛-练习集

思路:根据中序和后序查树的根与节点,输出层序,可以用模拟的方式,过程中直接存储树的每一层信息

主要过程就是,根据后序找根节点,中序划分左右子树

先看后序遍历-最后遍历根节点,所以最后一个元素是根节点

然后因为中序遍历是左-根-右的顺序,所以就可以直接用找到的根节点划分出左右子树

然后在划分后的子树基础上重复以上操作

代码如下:

input()
h_list = list(input().split())
z_list = list(input().split())
zip_list = [[h_list,z_list]]
tree_l,tree_r,tree_lb,tree_rb = [],[],[],[]
tree_rows = []
#模拟建树过程,找到层序遍历每一层的元素,保存并输出
while zip_list!=[]:
    re_list = []
    for x in zip_list:
        node_t = x[0]
        node_b = x[1]
        if len(node_t)>1 and len(node_b)>1:
            tree_rows.append(node_t[-1])
            tree_lb = node_b[0:node_b.index(node_t[-1])]
            tree_l = node_t[0:len(tree_lb)]
            tree_rb = node_b[len(tree_lb)+1:len(node_b)]
            tree_r = node_t[len(tree_l):-1]
            re_list.append([tree_l,tree_lb])
            re_list.append([tree_r,tree_rb])
        if len(node_t)==1 and len(node_b)==1:
            tree_rows.append(node_t[0])
    zip_list = re_list[:]
print(*tree_rows)

 

提交结果:

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值