树的遍历15 python代码

前置知识:二叉树的四种遍历方式:

有一二叉树如下图一所示:

通过以下四种遍历结果分别如下

一:先序遍历DLR(D为根,L为左节点,R为右节点)

1 2 4 3 5 6

二:中序遍历LDR

4 2 1 5 6 3

三:后续遍历

4 2 6 5 3 1

四:层序遍历

1 2 3 4 5 6

题目:

一个二叉树,树中每个节点的权值互不相同。

现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。

输入格式

第一行包含整数 N,表示二叉树的节点数。

第二行包含 N 个整数,表示二叉树的后序遍历。

第三行包含 N 个整数,表示二叉树的中序遍历。

输出格式

输出一行 N 个整数,表示二叉树的层序遍历。

数据范围

1≤N≤30,
官方并未给出各节点权值的取值范围,为方便起见,在本网站范围取为 1∼N。

输入样例:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出样例:

4 1 6 3 5 7 2

分析:

提示:后序遍历给出的根结点永远是在最后,中序遍历的根节点都是在中间。根左右边的结点总数不会变。

根据提示,我们可以想到先将树构建起来,然后对书进行层序遍历。

构建一个类node,有值、左结点、右节点。

class node():
    lc = None
    rc = None
    va = None

构想一个函数,给入后续遍历与中序遍历的结果能自动返回根节点。

如下:

def find_t(a:list,b:list):
    Node = node()
    if a==[]:
        return Node
    Node.va = a.pop()
    mid = b.index(Node.va)
    
    Node.lc = find_t(a[:mid],b[:mid])
    Node.rc = find_t(a[mid:],b[mid+1:])
    return Node

最后只需要对返回的根节点进行层序遍历即可。

root = find_t(hx,zx)
l = [root]

while l!=[]:
    if l[0].lc.va != None:
        l.append(l[0].lc)
    if l[0].rc.va != None:
        l.append(l[0].rc)
    print(l.pop(0).va,end = ' ')

本文结尾:

本文利用递归的结构对树进行重建,采用队列对树进行层序遍历。当然本题解法并不唯一,本解法性能也许并不好,欢迎各位提问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值