一道二叉树搜索的小问题
算法导论中的一道小习题,不是很明白意思,请大家指教
Suppose that we have numbers between 1 and 1000 in a binary search tree and want to search for the number 363. Which of the following sequences could not be the sequence of nodes examined?
a)2, 252, 401, 398, 330, 344, 397, 363.
b)924, 220, 911, 244, 898, 258, 362, 363.
c)925, 202, 911, 240, 912, 245, 363.
d)2, 399, 387, 219, 266, 382, 381, 278, 363.
e)935, 278, 347, 621, 299, 392, 358, 363.
[解决办法]
二叉排序树的特点就是:
对于任意节点,它左子树上的所有节点的值均小于该节点的值,它右子树上所有节点的值均大于该节点的值。
因此,在搜索时,从根节点开始,递归操作:
1)如果要查找的值小于根节点的值,就在它左子树查找;
2)等于,返回;
3)大于,在右子树查找。
题目中查找363,在C项:
首先根节点为925,比363大,则在它左子树查找,因此后面所有访问到的节点的值都应该小于925.
然后根节点为202,比363小,则在它右子树查找,因此后面所有访问到的节点的值都应该大于202.
然后根节点为911,比363大,则在它左子树查找,因此后面所有访问到的节点的值都应该小于911,但是后面出现了912,因此C是不对的。