在BST中搜索时可能的搜索路径数


13

我有以下问题,但没有答案。如果我的方法正确,我将不胜感激:

问:在二叉搜索树中搜索键值60时,遍历包含键值10、20、40、50、70、80、90的节点,而不必按给定的顺序进行。从包含值60的根节点开始的搜索路径中,这些键值可以出现多少种不同的顺序?

(A)35(B)64(C)128(D)5040

从这个问题中,我了解到遍历必须包括所有给定的节点,最终我们必须达到键60。例如,这样的组合之一是:

10、20、40、50、90、80、70、60。

由于我们必须遍历上面给出的所有节点,因此我们必须从10或90开始。如果我们从20开始,我们将不会达到10(因为60> 20并且将遍历20的右子树)

同样,我们不能从80开始,因为我们将无法达到90,因为80> 60,我们将在80的左子树中遍历,因此无法达到90。

取10。剩余的节点为20、40、50、70、80、90。下一个节点可以为20或90。出于前面提到的相同原因,我们不能取其他节点。

如果我们以相似的方式考虑,则在每个级别我们都有两个选择。由于有7个节点,因此前6个有2个选择,最后1个没有选择。所以完全有

2222221排列= = 642664

  1. 这是正确的答案吗?

  2. 如果没有,更好的方法是什么?

  3. 我想概括一下。如果给出节点,则总共可能的搜索路径为2 n 1n2n1

Answers:


15

如果寻找键60,我们得出的数字小于60,那么我们继续(在较大的数字处),而我们再也不会遇到小于数字。该参数可以重复,因此数字10、20、40、50必须沿着搜索顺序出现。ķKK

类似地,如果寻找键60,我们得到的数字大于60,我们就离开了(较小的数字所在),而我们再也不会遇到大于数字。因此,数字90、80、70必须沿着该搜索顺序出现。ķKK

序列10,20,30, 40,50和90,80,70然后可以,只要它们的亚序列完整保留一起混洗。因此我们可以有10、20、40、50、90、80、70,也可以有10、20、90、30、40、80、70、50。

现在我们可以计算数字,选择大数字和小数字的位置。请参阅Aryabhata的评论。我们有两个序列,分别是4和3。我可以通过几种方式洗牌?在最后的7个位置中,我必须为较大的数字选择3个位置(其余的4个对于较小的数字)。我可以选择种方式。固定这些位置后,我们便知道了完整的顺序。例如,我的第一个示例的位置为SSSSLLL,第二个示例的位置为SSLSLLS。(73)

您要求一个概括。数始终小于找到的数字,数始终按相对顺序固定。较小的数字必须上升,Arger的数字必须下降。然后,数字为。ý X + ÿxy(x+yy)

PS(已编辑)。感谢吉尔斯(Gilles),他指出30不是问题。


我当然想尝试。由于编号90、80、70必须在一起,因此将它们视为一个编号。可以放在6个位置中:_ 10 _ 20 _ 30 _ 40 _ 50 _ 等于 4个地方,即 但是必须按正在发生的常见组合进行划分(我无法弄清楚)2 42624
avi 2013年

@avi不,他们不必在一起,只需要按以下顺序:10、20、90、30、40、80、70、50可以。
Hendrik 2013年1

1
@avi:尝试以这种方式思考:大小。现在您有8个景点,其中5个为小景点,还有3个为大景点。您如何填充它们?8选择3。得出56。我想亨德里克也得到了。
Aryabhata

2
@HendrikJan原始问题中没有30,只有7个值。7选择3是(A)。
吉尔斯(Gilles)'所以

1
@HendrikJan-您能向我解释一下:数字始终小于找到的数字,数字始终按相对顺序固定ÿxy
avi 2013年

1

我们将把Moves转换为Text。假定在搜索过程中我们遍历了这些节点

在此处输入图片说明

可以看出,红色大于60,蓝色小于60。

到节点60的路径已经涉及那些节点。因此,可能的解决方案之一是 任何其他解决方案都将仅包含这些动作。一次在一个节点上搜索coz,我们就可以在比较中获得S或L的方向,并且由于遇到了这些节点,因此这意味着从该集合中选择了方向。

{S,S,S,S,L,L,L}

因此,可能解的总数=该集合的所有置换,由 答案= 选项A

7!4!×3!=35
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.