我正在准备考试,我偶然发现了以下问题:
绘制二进制搜索树,如果要按以下顺序添加数据,将会产生结果:
10,9,8,7,6,5,4,3
为什么树不适合高效搜索?
我的回答:
我想在创建BST时,我们以值10作为根节点开始,然后在第一级添加9作为左子树值。然后是8到9的左子树,依此类推。我不知道为什么这会使搜索效率低下。有什么想法吗?
答案 0 :(得分:8)
由于值按降序排列,它们会在每个级别添加到左侧,实际上会留下一个链接列表,它需要O(N)进行搜索,而不是BST的首选O(logN)。
图:
10
/
9
/
8
/
7
/
6
/
5
/
4
/
3
答案 1 :(得分:0)
这会创建一个链表,因为它只是一系列节点;这是一棵非常不平衡的树。
你应该查找red-black trees。它们具有相同的时间复杂性,但它会不断地在节点周围移动,因此它总是形成三角形。这将使树保持平衡。
答案 2 :(得分:0)
这是低效的,因为节点将始终添加到先前节点的左子树。进行搜索检查列表中的每个节点,直到它找到结果,即使答案总是在左边,因此实际上使得它需要更多的计算,而不仅仅是通过循环搜索列表。