【发布时间】:2021-03-24 10:37:17
【问题描述】:
inorder = [1,2,3,4,5,7,6,8,9,10,11,12,13,14,15]
这是中序遍历。
- 正如 trinkot 在 cmets 中所说,我们不能仅使用中序遍历来构造二叉树。让我们假设还给出了任何随机的前序遍历。我们如何在不创建树的情况下找到级别顺序遍历。
我想要这样的关卡顺序遍历。
levelorder = [8,4,12,2,6,10,14,1,3,5,7,9,11,13,15]
我想过使用递归函数,比如
def rec(lis):
if(len(lis)<1):
return
mid = len(lis)//2
root = lis[math.ceil(mid)]
array.append(lis[root])
rec(lis[0:mid])
rec(lis[mid+1:])
但这不起作用,因为第二次递归调用仅在所有第一次递归调用结束后发生。 有没有办法让我交替调用第一个和第二个递归调用?
或者有没有另一种方法可以在不构造树的情况下找到树的级别顺序遍历?
【问题讨论】:
-
如果你只有中序遍历作为输入,那么你并不真正知道树的形状是什么(有许多不同的树具有相同的中序序列)。所以这是不可能的,或者说:可能有许多不同的答案都可能是正确的。
-
哦...好吧。假设我们也有一个前序遍历,那么我们如何在不创建另一棵树的情况下找到水平顺序遍历。有可能吗?
-
您应该编辑您的问题,并请展示您为与更改后的问题保持一致所做的努力。
标签: python algorithm tree-traversal