我的任务是实现一个二叉搜索树,并且正在使用通常的struct route:
struct Node {
int value;
Node * left;
Node * right;
Node( int val ) {
...
}
}
当我考虑使用动态数组实现它并使用算法来计算左右节点时。我的问题是数组实现是否会改变操作的时间和空间复杂性(插入,删除,依次行走等),无论好坏?
我可以看到删除操作可能是一个问题,重新组织数组并保持树的结构,但树的大小很小,最多有一百个节点。
答案 0 :(得分:2)
操作的时间和空间复杂性(插入,删除,依次行走等)是否会发生变化?
在基于数组的树中插入和删除非叶节点将需要移动数组中后面的所有元素。这会将复杂度从O(log n)更改为O(n log n)。
数组实现是否比使用结构更好地使用内存?
是的,毫无疑问。基于数组的树对缓存更友好,占用的分配更少,而且不需要为每个节点存储指针。