从inorder和level遍历构造二叉树

时间:2013-03-14 01:57:20

标签: java binary-tree

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

1 个答案:

答案 0 :(得分:2)

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

      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

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

结果:

        8
       /  9 10
      4
  2 1  \
        6

3级 - 左子树

按顺序:1 2

等级:2 1

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

结果:

       8
      /  9 10
     4
    / \   
   2   6
  /
 1

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