用cpp语言制作一个程序,要求写出完整的代码,该程序先读取一个单词,该单词以字母开头,包括字母数字的任意序列.然后程序检查该单词是否位于树中.如果是,就使用半张开技术,重新组织树,并给这一单词的出现次数加1.如果没有在树中找到单词,就为该单词创建一个新的叶子节点,将其插入树中.处理完所有的单词后,对树进行中序遍历,计算所有节点的频率,再把这些频率计数加在一起并输出,作为树中单词个数和文件中单词个数的最后结果.
时间: 2023-02-05 13:50:34 浏览: 68
这是一个使用 C++ 语言实现的插入单词到树中、计算单词出现次数、并进行中序遍历的程序的完整代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
struct TreeNode {
string word;
int count;
TreeNode *left;
TreeNode *right;
};
// 插入单词到树中,如果单词已经存在则把出现次数加 1
void insertWord(TreeNode *&root, string word) {
if (root == nullptr) {
root = new TreeNode{word, 1, nullptr, nullptr};
return;
}
if (word < root->word) {
insertWord(root->left, word);
} else if (word > root->word) {
insertWord(root->right, word);
} else {
root->count++;
}
}
// 中序遍历树,计算所有节点的频率和
int traverseTree(TreeNode *root) {
if (root == nullptr) {
return 0;
}
int count = traverseTree(root->left) + root->count;
cout << root->word << ": " << root->count << endl;
count += traverseTree(root->right);
return count;
}
int main() {
TreeNode *root = nullptr;
string word;
int totalCount = 0;
// 读取单词并插入树中
while (cin >> word) {
insertWord(root, word);
totalCount++;
}
// 计算所有单词的频率和
int treeCount = traverseTree(root);
cout << "Total words in tree: " << treeCount << endl;
cout << "Total words in file: " << totalCount << endl;
return 0;
}
```
希望这对您有帮助。
阅读全文