二叉树
首先先知道二叉树的排序
至于为什么中序是这样的,先对以D为节点的树进行遍历,G没有儿子,返回到D,然后右边排序,H有儿子而且是左序,所以先写I然后是H,然后返回D,然后遍历A的右边,到C发现C有儿子,先遍历C的左边,发现E有儿子,对E进行中序,先E后J,然后返回CF。
H题 Trie树
直接上代码吧……因为我实在是不会写这节课的代码。。。
#include<iostream>
#include<string.h>
using namespace std;
struct trie_node
{
int cnt;
bool flag;
trie_node *child[30];
};
trie_node* creat_node()
{
trie_node *node = new trie_node();
node->cnt = 0;
node->flag = false;
memset(node->child,NULL,sizeof node->child);
}
void insert_node(trie_node *root,string key)
{
trie_node *node = root;
for(int i=0;i<key.size();i++)
{
if(node->child[key[i]-'a'] == NULL)
node->child[key[i]-'a'] = creat_node();
node = node->child[key[i]-'a'];
node->cnt++;
}
}
int search_trie(trie_node *root,string key)
{
trie_node *node = root;
for(int i=0;i<key.size();i++){
if(node->child[key[i]-'a'] == NULL){
return 0;
}
node = node->child[key[i]-'a'];
}
return node->cnt;}
int main()
{
int n;
cin>>n;
string s1,s2;
trie_node *root = new trie_node();
for(int i=0;i<n;i++){
cin>>s1;
insert_node(root,s1);
}
int m;
cin>>m;
for(int i=0;i<m;i++){
cin>>s2;
cout<<search_trie(root,s2)<<endl;
}
return 0;
}