首先,我想说这不是家庭作业。我正在准备面试并遇到这个问题。我想我们可以传递中序和水平序遍历的定义。:-)。
例如:
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 ...
谁能帮我验证我的解决方案?如果再给一个,真的很感激。