首先,我想声明这不是一个作业。我正在为一次面试做准备,遇到了这个问题。我猜我们可以跳过中序遍历和层序遍历的定义。:-)。
例如:
上述树的中序遍历和层次遍历如下: 5, 10, 20, 50, 51, 55, 60, 65, 70, 80 50, 10, 60, 5, 20, 55, 70, 51, 65, 80
我的想法是: (1) 遍历层次遍历数组,找出第一个出现在中序遍历数组中的元素。我们称这个元素为当前根节点。 (2) 找到当前根节点在中序遍历数组中的索引。中序遍历数组由该索引分隔。中序遍历数组的左侧是当前根节点的左子树,右侧是当前根节点的右子树。 (3) 更新中序遍历数组为其左侧,然后返回步骤1。 (4) 更新中序遍历数组为其右侧,然后返回步骤2。
以上述树为例。
例如:
50
/ \
10 60
/ \ / \
5 20 55 70
/ / \
51 65 80
上述树的中序遍历和层次遍历如下: 5, 10, 20, 50, 51, 55, 60, 65, 70, 80 50, 10, 60, 5, 20, 55, 70, 51, 65, 80
我的想法是: (1) 遍历层次遍历数组,找出第一个出现在中序遍历数组中的元素。我们称这个元素为当前根节点。 (2) 找到当前根节点在中序遍历数组中的索引。中序遍历数组由该索引分隔。中序遍历数组的左侧是当前根节点的左子树,右侧是当前根节点的右子树。 (3) 更新中序遍历数组为其左侧,然后返回步骤1。 (4) 更新中序遍历数组为其右侧,然后返回步骤2。
以上述树为例。
(1) 5 is the first element appears in the in-order array.
(2) [50 ...60] is the left sub-tree of 5 and [20 ... 80] is the right sub-tree of 5.
(3) update the in-order array as [50 ... 60]
(1) 10 is the first element appears in [50 10 60].
(2) [50] is the left sub-tree of 10 and [60] is the right sub-tree of 10.
(3) update ...
有人能帮我验证我的解决方案吗?如果能提供另一个解决方案,将不胜感激。