从inorder和level遍历构造二叉树

在给定顺序和级别遍历的情况下,需要帮助找到构造二叉树的方法。 是否可以使用递归来实现,因为必须通过使用队列来完成级别遍历?

以下是解决此问题的方法。 通过反向观察,更容易思考如何处理每个步骤:

8 / \ 4 9 / \ \ 2 6 10 / 1 

你有以下几点:

顺序: 1 2 4 6 8 9 10

等级: 8 4 9 2 6 10 1

1级 – 根

级别遍历是从树到左,从上到下遍历(如广度优先搜索)。 在此示例中,您知道8将是根节点。 现在看一下inorder遍历,我们知道1 2 4 6组成左子树, 9 10组成右子树。 所以我们有:

  8 1 2 4 6 9 10 

在保留顺序的同时,创建一个级别遍历的副本,而不使用我们将要访问的节点进行左右递归构造。 下面的注释将通过左侧树步骤和传递的内容:

2级 – 左子树

顺序: 1 2 4 6

等级: 4 2 6 1

  • 根: 4
  • 左子树: 1 2
  • 右子树: 6

结果:

  8 / 9 10 4 2 1 \ 6 

3级 – 左子树

顺序: 1 2

等级: 2 1

  • 根: 2
  • 左子树: 1
  • 右子树:空

结果:

  8 / 9 10 4 / \ 2 6 / 1 

现在我们已经完成了一直向前的复制,希望你能够了解如何处理树上正确的孩子! 一旦你有了算法,你应该能够在给定两个不同的遍历的情况下构造树。 关键是要根据两次遍历来识别如何在每次递归调用时确定 ,其余的应该遵循。