我正在努力掌握大O符号。它看起来很抽象。我选择了最常见的数据结构--数组、哈希表、链表(单链表和双链表)和二叉树,并猜测了最常见的操作--插入和搜索--的大O符号。这是一个惯性视图的准备工作。我只需要学习基础知识,而不是阅读一整本关于算法的教科书,尽管这将是理想的。下表是否有效?
Data Structure Big O Search Big O Insert
Array O(1) O(n)
Hash O(1) O(1)
Single Linked List
我知道如何从一般的树转换成二叉树,
a a
/ | \ /
b c d -> b
\
c
\
d
我刚刚被问到如何从一般的树转换成二叉树。我的想法是,问我的人要么不是指二叉搜索树(我问他,他说他指的是),要么是他误解了课堂笔记中的某些东西。无论如何,有没有人听说过这样做?从通用树到二叉搜索树?我给他的答案是首先转换成二叉树,然后对其进行排序,得到二
让我们看一下下面的图片
这就是所谓的范围树。我不明白一件事,它看起来像一个二叉搜索树,所以如果我们插入元素,我们可以使用与插入二叉搜索树相同的过程。那么有什么不同呢?
我读过一篇教程,我猜它是kd树的变体,查询搜索树(如几何点搜索等),但如何构建它?像二叉树或者它需要额外的参数吗?也许就像这样
struct range
{
int lowerbound;
int upperbound,
int element;
};
在插入过程中,我们必须检查
if(element>lowerbound && element <upperbound)
then ins
我知道,在二进制搜索树中,元素是根据不等式的属性插入的,即:
if(n->val > val) insert(n->left, val); // root node greater then val insert to left
else if(n->val < val) insert(n->right, val); // root node less then val insert to left
// I am ignoring the case when n->val == val here
我想知道应该根据什么基础将节点插入到纯