在复习数据结构的折半查找判定树这一部分时,我发现王道并没有对折半查找判定树的构造进行详细地说明,在解答后面的2017年的真题时,王道也仅仅是用排除法进行选择,不但没解释清楚原理,反而还增加了我的疑惑。因此,我在仔细钻研了数据结构等教材后,总结出了下面的求解方法。
规则:
1.先求出查找范围的中点值=(Min+Max)/2
2.向上或者向下取距离中点最近的值,作为根节点
例题
构造1,2,3,4,5,6,7,8,9,10的折半查找判定二叉树
第一步
向下取值
中点值:(1+10)/2=5.5,向下取距离中点最近的值:5
向上取值
中点值:(1+10)/2=5.5,向上取距离中点最近的值:6
第二步
向下取值
根节点-左子树
中点值:(1+4)/2=2.5,向下取距离中点最近的值:2
根节点-右子树
中点值:(6+10)/2=8,向下取距离中点最近的值:8
向上取值
根节点-左子树
中点值:(1+5)/2=3,向上取距离中点最近的值:3
根节点-右子树
中点值:(7+10)/2=8.5,向上取距离中点最近的值:9
第三步
向下取值
节点2-左子树
中点值:(1+1)/2=1,向下取距离中点最近的值:1
节点2-右子树
中点值:(3+4)/2=3.5,向下取距离中点最近的值:3
向上取值
节点3-左子树
中点值:(1+2)/2=1.5,向上取距离中点最近的值:2
节点3-右子树
中点值:(4+5)/2=4.5,向上取距离中点最近的值:5
显然,到这一步时,无需计算,我们便可以得到节点4在二叉树中的位置
第四步
向下取值
节点8-左子树
中点值:(6+7)/2=6.5,向下取距离中点最近的值:6
节点8-右子树
中点值:(9+10)/2=9.5,向下取距离中点最近的值:9
向上取值
节点9-左子树
中点值:(7+8)/2=7.5,向上取距离中点最近的值:8
节点9-右子树
中点值:(10+10)/2=10,向上取距离中点最近的值:10
同样的,到这一步时,无需计算,我们便可以得到节点7在二叉树中的位置
至此,折半查找判定二叉树构造完成