我正在研究算法和数据结构类的项目。
如果我有一个二叉搜索树,每个节点包含:
typedef struct Node {
char* name;
List* list;
struct Node *right;
struct Node *left;
} Node;
我希望在该列表中搜索确定的值,这次搜索的时间复杂度是多少?我知道列表中搜索的时间复杂度是O(n),但我还想考虑树中搜索的时间复杂度。列表未排序,BST按字母顺序排序。
答案 0 :(得分:2)
非平衡二进制搜索树可以退化为链表,因此最坏情况的复杂性仍为O(n)
。
答案 1 :(得分:0)
答案归结为"树是否排序" (并按有用的顺序..)
如果您需要搜索所有节点以及每个节点中的所有列表,(平均情况)时间复杂度将为O(n*m)
,其中n
是列表的平均长度,{{ 1}}是树中节点的数量。
如果只能检查某个路径(类似于在二叉搜索树中只搜索一个路径的方式),则(平均情况)复杂度为m
。