【C++】henuACM暑期培训Day9 二叉树_哈夫曼树_字典树

二叉树

首先先知道二叉树的排序

二叉树

在这里插入图片描述
在这里插入图片描述
至于为什么中序是这样的,先对以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;
}

猜你喜欢

转载自blog.csdn.net/qq_44899247/article/details/97489847