字符串应用(4)排序

分析:字符串排序在字典树中的表现便是把每一个字符串都插入建立字典树,之后前序遍历字典树便可。

结构体字典树节点

struct TrieNode()
{
    int count;
    struct TrieNode *next[26];
    char *current_str;   //当前节点处字符串
};




插入字符串

void Insert(char *str)
{
    int i = 0;
    TrieNode* p = root;
    while(str[i] != '\0')
    {
        //如果包含str[i]的分支存在,则新建此分支
        if(p->next[str[i] - 'a'] == NULL)
        {
            p->next[str[i] - 'a'] = CreateTrieNode();
            //将父节点中的字符串添加到当前节点的字符串中
            strcat(p->next[str[i] - 'a']->current_str, p->current_str);
            char tmp[2];
            tmp[0] = str[i];
            tmp[1] = '\0';
            //将str[i]添加到当前节点的字符串中
            strcat(p->next[str[i] - 'a']->current_str, tmp);
            p = p->next[str[i] - 'a'];
        }
        else
        {
            p = p->next[str[i] - 'a'];
        }
        i++;
    }
    p->count++;
}

前序遍历打印字符串

void print(TrieNode *root, char** str, int & count)
{
    if(root != NULL)
    {
        if(root->count != 0)    //当前存在字符串
        {
            for(int i = 0; i < root->count; i++)
                str[count++] = root->current_str;
        }
        for(int i = 0; i < 26; i++)
            print(root->next[i], str, count);
    }
}


你可能感兴趣的:(字典树之字符串排序)