Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 搜索时检查的键的顺序_Algorithm_Binary Search Tree - Fatal编程技术网

Algorithm 搜索时检查的键的顺序

Algorithm 搜索时检查的键的顺序,algorithm,binary-search-tree,Algorithm,Binary Search Tree,假设某个二叉搜索树的键是介于1之间的整数 20,我们搜索10。下面哪个序列不能是序列 检查了多少把钥匙 a 20,5,15,8,12,9,10 b 1、12、10、16、14、15 c 5、13、7、10、8 我不太明白这个问题,我理解的是哪个序列没有10个,但既然每个序列都有10个,难道这不意味着每个序列都可以被检查吗?正如评论中提到的,如果10是目标,b和c没有意义,所以我们将问题改为只搜索给定的数字 当向下钻取二叉搜索树时,我们永远不会遇到超出我们之前比较范围的键 例如,考虑: 我们还可

假设某个二叉搜索树的键是介于1之间的整数 20,我们搜索10。下面哪个序列不能是序列 检查了多少把钥匙

a 20,5,15,8,12,9,10

b 1、12、10、16、14、15

c 5、13、7、10、8


我不太明白这个问题,我理解的是哪个序列没有10个,但既然每个序列都有10个,难道这不意味着每个序列都可以被检查吗?

正如评论中提到的,如果10是目标,b和c没有意义,所以我们将问题改为只搜索给定的数字

当向下钻取二叉搜索树时,我们永远不会遇到超出我们之前比较范围的键

例如,考虑:

我们还可以想象树向下延伸得更远——例如,节点可以保存浮点数,而不仅仅是整数

假设我们正在寻找7.5,所以我们已经深入到7,在7下面还有更多的节点,比如7.1、7.3等等

在余下的搜索中,我们永远不会遇到:

a任何小于6的键都可以,因为我们在6点取了右分支

也不是

b任何大于8的键,因为我们在8点取左分支

现在考虑一下我们访问过的密钥序列: 8->3->6->7

注意小于6、大于8的边界是如何从该序列中派生出来的,例如,从8我们降低到3,因此这意味着随后遇到大于8的键是不可能的


由于这是一项作业,我不会直接给出答案,但我希望这足够详细,您可以自己完成:

a是有意义的,因为10是最后一次检查的,所以找到它时请停止;b和c都没有意义,因为它们在找到10后继续。由于这是胡说八道,我们只能猜测问题的意图。FWIW,我的猜测是:当你向下钻取一棵二叉树时,你永远不会遇到一个键值大于你先前从中获取“less”分支的最后一个节点,同样,也不会遇到一个键值小于你先前获取“greater”分支的位置。这个规则被上面的一个序列打破了:@racraman你能举个例子吗?我仍然对您的陈述感到困惑,您不应该遇到大于先前从中获取“较小”分支的最后一个节点的键值,也不应该遇到小于先前获取“较大”分支的位置的键值。谢谢。根据你要找的问题假设10。向下钻取时,会遇到键值为5的节点。假设左分支保存“较小”的值,右分支保存“较大”的值。这意味着我们将选择正确的分支,但这也意味着我们现在不应该遇到任何值小于5的节点。@racraman而且我仍然看不出上面的哪个序列违反了规则,因为似乎所有3棵树都能很好地遍历,你能指出我吗?thanks@racraman我想不出哪个序列不能检查,你能帮我吗?