关于二分搜索树中圣经的例子

来源:

马尔克ov

2017-05-24

不太明白为什么单词组成的vector可以进行二分查找。我的理解是想进行二分搜索,必须要有先把数据本身或者索引建立成树的结构?没看懂哪里做建立索引这件事了?

写回答

1回答

liuyubobobo

2017-05-25

在我们的测试用例中,(参见这个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)++;    
}


2
3
马尔克ov
回复
liuyubobobo
原来如此!谢谢老师
2017-05-25
共3条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程