关于二分搜索树中圣经的例子
来源:
马尔克ov
2017-05-24
不太明白为什么单词组成的vector可以进行二分查找。我的理解是想进行二分搜索,必须要有先把数据本身或者索引建立成树的结构?没看懂哪里做建立索引这件事了?
写回答
1回答
-
在我们的测试用例中,(参见这个main函数 https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/05-Binary-Search-Tree/Course%20Code%20(C%2B%2B)/04-Binary-Search-Tree-Search/main.cpp )
我们创建了一个BST,之后将单词逐渐的放进BST,就是把我们的单词数据组织成二分搜索树的过程哦。在这个过程中,我们设置的每一个节点,key是一个string,表示那个单词;value是一个int,表示单词的频率。具体如下:
// 创建BST BST<string, int> bst = BST<string, int>(); // 遍历vector中的所有单词 for (vector<string>::iterator iter = words.begin(); iter != words.end(); iter++) { // 查找单词在树中是否存在,如果存在,返回的*res中包含该单词的频率;否则,*res为NULL int *res = bst.search(*iter); if (res == NULL) // 如果不存在,我们第一次看见这个单词,将这个单词插入到二分搜索树中,频率记做1 bst.insert(*iter, 1); else // 如果存在,我们又一次看见了这个单词,将单词的频率做加1操作 (*res)++; }
232017-05-25
相似问题