【发布时间】:2013-02-13 15:36:50
【问题描述】:
首先,我想说这不是家庭作业。我正在准备面试并遇到这个问题。我想我们可以通过 in-order 和 level-order 遍历的定义。 :-)。
例如:
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 ...
谁能帮我验证我的解决方案? 如果再给我一个,真的很感激。
【问题讨论】:
-
我认为这不符合规定,according to Wikipedia。
-
我刚刚写了一个程序来验证它。中序遍历似乎没有问题。能否请您按顺序遍历示例树让我仔细检查一下?
-
看来我弄错了。看起来是对的,抱歉。
标签: data-structures binary-tree inorder