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

多叉树遍历

题目

给定以嵌套列表形式给出的多叉树,求它的后序遍历注:每个代表非空多叉树的列表包含至少一项;列表第一项代表节点值,其后每一项分别为子树;遍历子树时以列表下标从小到大的顺序进行。
输入格式:
一行合法的Python表达式,可解析为嵌套列表形式的多叉树结构
输出格式:
一行整数,以空格分隔
输入样例:
[1,[2,[3,[4],[5]],[6]],[7],[8,[9],[10]]]
输出样例:
4 5 3 6 2 7 9 10 8 1
时间限制:500ms内存限制:32000kb

思路

看了隔壁大佬的代码,感觉我的程序思路有点复杂。我尽力了
想要后序遍历的输出,就从最左侧的叶子结点开始输出。用递归的方法比较简便,如果检测到这个嵌套列表的第一项类型是int,就说明它是根节点。那么就一直向下递归,遍历这个列表后面的元素…直到,检测到某个嵌套列表的第一项类型是list,并且长度为1 ,就是检测到最底部、最左侧的叶子结点了。

把这个子树的叶子结点从左至右依次存储入输出列表中,然后把子树的根节点放输出列表最后。就完成后序遍历啦。

代码

output = []
def multi_way_tree(lst):
    if type(lst) == list and len(lst) == 1:#递归结束条件
        output.append(lst[0])
    else:
        for i in range(len(lst)):
            if type(lst[0]) == int:
                multi_way_tree(lst[1:])
                output.append(lst[0])
                break #需要结束循环
            else:
                multi_way_tree(lst[i])
    return output

lst = eval(input())
print(*multi_way_tree(lst))

欢迎指正~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值