【问题标题】:Construct binary tree from inorder and level traversal从中序和级别遍历构造二叉树
【发布时间】:2013-03-14 13:37:27
【问题描述】:

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

【问题讨论】:

  • 构造和遍历略有不同。你想关注哪一个?
  • 构造,我知道如何逐级遍历,但似乎无法找到一种方法来从中序和级别遍历中构造一棵树
  • 再次 - 遍历和构造是不同的。向我们展示您拥有什么样的代码,我们可以从那里开始。请务必将其编辑到帖子中。
  • 这是我的顺序 (2 4 1 3 5) 和级别 (1 2 3 4 5) 你将如何从中构造一棵树?
  • 两棵树都会大不相同。 (另外,那不是代码。你有what you've tried吗?)

标签: java binary-tree


【解决方案1】:

以下是解决此问题的方法。从逆向看,更容易想到如何处理每个步骤:

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

你有以下:

订购者:1 2 4 6 8 9 10

等级:8 4 9 2 6 10 1

1 级 - 根

级别遍历是树的从左到右、从上到下的遍历(如广度优先搜索)。在本例中,您知道8 将是根节点。现在看中序遍历,我们知道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

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

【讨论】:

  • 非常感谢您的回答。它帮助了很多@Reservedegotist
  • 解释得很好。
猜你喜欢
  • 2021-09-03
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 2014-05-27
相关资源
最近更新 更多