【字典树】目录











待解决:
hdu1298

hdu1075

hdu1671

hdu1251

hdu2846







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会记录下来你的问题,并且回答你。 对于第一个问题,是的,字典树的展示可以通过缩进方式层次展示目录树,这样可以更加直观地展示出字典树的结构。 对于第二个问题,我们可以通过以下代码将一个字符串插入到字典树中: ```c++ void insert(string word) { TrieNode *node = root; for (char c : word) { if (!node->children[c - 'a']) { node->children[c - 'a'] = new TrieNode(); } node = node->children[c - 'a']; } node->is_end = true; node->word = word; } ``` 其中,`root`是字典树的根节点,`TrieNode`是字典树的节点结构体,包含一个布尔值`is_end`表示是否为一个单词的结尾,以及一个字符串`word`表示当前节点所代表的单词。 对于第三个问题,我们可以通过以下代码实现基于树的先序遍历来展示以某个字符串为前缀的所有单词: ```c++ void dfs(TrieNode *node) { if (node->is_end) { cout << node->word << endl; } for (int i = 0; i < 26; i++) { if (node->children[i]) { dfs(node->children[i]); } } } void search(string prefix) { TrieNode *node = root; for (char c : prefix) { if (!node->children[c - 'a']) { return; } node = node->children[c - 'a']; } dfs(node); } ``` 其中,`search`函数用于查询以`prefix`为前缀的所有单词,`dfs`函数用于基于树的先序遍历展示所有以某个字符串为前缀的单词。 对于第四个问题,我们可以通过以下代码统计每个单词的词频,并按照字母序展示所有单词的词频: ```c++ void count_word_frequency(TrieNode *node, unordered_map<string, int> &word_freq) { if (node->is_end) { word_freq[node->word]++; } for (int i = 0; i < 26; i++) { if (node->children[i]) { count_word_frequency(node->children[i], word_freq); } } } void display_word_frequency(TrieNode *node) { unordered_map<string, int> word_freq; count_word_frequency(node, word_freq); vector<pair<string, int>> word_freq_vec(word_freq.begin(), word_freq.end()); sort(word_freq_vec.begin(), word_freq_vec.end()); for (auto word_pair : word_freq_vec) { cout << word_pair.first << " " << word_pair.second << endl; } } ``` 其中,`count_word_frequency`函数用于统计每个单词的词频,`display_word_frequency`函数用于按照字母序展示所有单词的词频。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值