Math 在给定值的BST查找中,我们可以通过多少种不同的方式查看这些特定值?
当在二元搜索树中搜索键值60时,不必按照给定的顺序遍历包含键值10、20、40、50、70、80、90的节点。这些键值在从根到包含值60的节点的搜索路径上可能出现多少不同的顺序 回答:7/(3!4!) 我不知道他们是怎么想出答案的 我可以想出以下两件事Math 在给定值的BST查找中,我们可以通过多少种不同的方式查看这些特定值?,math,data-structures,binary-search-tree,traversal,combinatorics,Math,Data Structures,Binary Search Tree,Traversal,Combinatorics,当在二元搜索树中搜索键值60时,不必按照给定的顺序遍历包含键值10、20、40、50、70、80、90的节点。这些键值在从根到包含值60的节点的搜索路径上可能出现多少不同的顺序 回答:7/(3!4!) 我不知道他们是怎么想出答案的 我可以想出以下两件事 10 \ 20 \ 40 \ 50 \ 70 \ 80
10
\
20
\
40
\
50
\
70
\
80
\
90
/
60
及
当我尝试其他方法时,我无法通过访问所有给定的值从根跟踪到包含60的节点
e、 g
在上面的例子中,我只能按顺序访问50、90、80、70、60,而忽略了10、20和40。那么,答案是如何得出的呢
也许我不明白这个问题。可能不需要访问所有节点。在这种情况下,如何找到解决方案?这里有一个小小的思想实验:如果提供了信息,BST的根是否可能保持值20?如果是这样,那么您将继续在搜索60时移动到右子树(因为60>20),但在这种情况下,您将永远看不到值10,因为10必须在左子树中 同样地,树根可以是80吗?如果是这样的话,在搜索60时,你会在第一步向左移动(60<80),但是你永远不会看到90,因为90在左边的子树中 这表明我们的树根有一些有趣的东西。如果我们在搜索60时看到所有这些值,则并非所有这些值都可以是BST的根 那么,我们可以把什么看作根呢?一个选择是看10。由于集合中的所有剩余值都大于10,因此不排除任何可能性。另一个选项是90,因为集合中的所有剩余值都小于90 我们现在可以问同样的问题,关于子树的根,我们在看到根后会下降到子树的根。我们要么看到剩余值中的最大值,要么看到剩余值中的最小值,因为否则(使用类似的推理)我们会切断一些我们应该看到的值 更一般地说,我们看到的每个值需要是(1)大于60的最大值或(2)小于60的最小值。任何其他值都将不起作用,并将切断某些值 在提供的值中,四个(10、20、40、50)小于60,三个(70、80、90)大于60。当我们搜索60时,在每一点上,我们需要从第一组中选择最小的值,或者从第二组中选择最大的值作为我们在树搜索中看到的下一个值。因此,我们可以将60的搜索想象为一个由Ls和Rs组成的字符串,其中R表示“从左侧组中选取最小值”,L表示“从右侧组中选取最大值”。例如,rrlll将为我们提供以下搜索路径:
10
\ R
20
\ R
40
\ R
50
\ R
90
/ L
80
/ L
70
/ L
60
序列RLR会给我们
10
\ R
90
/ L
20
\ R
80
/ L
40
\ R
70
/ L
50
\ R
60
因此,我们的总体问题的答案是:有多少种方法可以生成一个由4个R和3个L组成的字符串?答案是7选择4(也等于7选择3):我们的字符串中有七个位置,我们可以选择其中四个为R,其余为L,或者选择其中三个为L,其余为R。这就是7!/(4!3!),这与您看到的答案相符
10
\ R
20
\ R
40
\ R
50
\ R
90
/ L
80
/ L
70
/ L
60
10
\ R
90
/ L
20
\ R
80
/ L
40
\ R
70
/ L
50
\ R
60