trie树动态分配内存模板

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define  MAX    26

typedef struct TrieNode	//trie的数据结构定义
{
    int v;  // 该节点作为前缀出现的次数
    struct TrieNode *next[MAX]; //next为指向结构体自身的一个空指针数组,用来存放下一节点的地址  //空指针数组可以存放任何数的地址。
} Trie;
Trie *root;


//构建字典树
void createTrie(char * str)
{

    int len=strlen(str);
    root=(Trie *)malloc(sizeof(Trie));
    for(int i=0;i<MAX;i++)
        root->next[i]=NULL;
    Trie *p=root,*q;
    for(int i=0;i<len;i++)
    {
        int id = str[i] - 'a'; //当前字符应该插入的位置
        if (p->next[id]==NULL)	//没有节点,则开辟一个新的节点
        {
            q=(Trie *)malloc(sizeof(Trie));
            q->v =1;	//则该节点作为前缀的次数为1
            for(int i = 0; i < MAX; i++)
                q->next[i] = NULL;	//新建节点的地址为0
            p->next[id]=q;
            p=q;
        }
        else
        {	p=p->next[id];
            p->v++;

        }
    }
}


//搜索字典树
int searchTrie(char * str)
{
    Trie *p =root;
    int len=strlen(str);
    for(int i=0;i<len;i++)		//如果这个字母存在
    {
        int id = str[i] - 'a';	//确定这个字母的位置
        if(p->next[id]==NULL)
            return 0;
        p->next[id];
    }
    return p->v; //返回最后的那个字符 所在节点的n,即搜索字符串作为前缀出现的次数
}

    原文作者:Trie树
    原文地址: https://blog.csdn.net/qq_28124713/article/details/50528248
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞