这道题考察的是折半查找时中间点的选择,当剩余序列为偶数个时,我们应该向上取整还是向下取整。例如对1,2,3,4四个数进行排序时,应该选2做中间点还是选3做中间点。实际上并没有要求,选哪个都能完成折半查找,只是在查找的全程你只能用一种方式。
如果向上取整,每个节点左子树的节点个数肯定大于等于右子树节点个数。反之若向下取整,每个节点右子树的节点个数大于等于左子树的节点个数。
b,c,d选项都自相矛盾,有的节点左子树的节点多,有的节点右子树的节点多。所以答案为a选项。
关于题目的思考:在做这题时我其实没有仔细看过折半查找的算法实现,只理解了折半查找的思想。所以在做题时没多想折半查找向上取整还是向下取整是否有一个定性的规定。事实上在算法实现中我们选择了用"/"——整除号来计算中间节点的序号,这样比较简单,而整除号是向下取整,会让我们产生折半查找选中间序列就应该是向下取整的思维定式。事实上算法应该服务于我们要实现的方法,我们不应该通过算法本身去理解一个方法。
出题人所给的正确选项正好是一个向上取整而产生的判定树,和书上通常出现的判定树都不同(出题人很会把握考生心理)。因为书上的判定树是基于我们所写的向下取整的算法而产生的。其实一开始我也没有过多去考虑这道题的答案,直到我自己动手去画一颗判定树却发现我画的判定树总是左边节点数大于等于右边节点数,和答案的判定树完全不一样时。我才开始思考是不是真的不能向上取整。其实之前是走入了一种思维定式。