• Trie树:POJ2001


    这是一道最简单的trie树的题

    有趣的是这道题的测试用例无法在VS上调试,只能在框框里不断提交测试了,哈哈

    最基本的Trie树,插入和查找操作没什么好说的

    注意节点添加一个count变量作为附加条件,记录该字母这这个位置出现的次数,还有几处需要注意的逻辑问题,在注释中标出了

    直接上代码了:

    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <stdio.h>
    using namespace std;
    char strList[1005][25];
    struct node
    {
        int count;
        node* childs[26];
        node(){
            count = 0;
            int i;
            for(i=0;i<26;i++){
                childs[i] = NULL;
            }
        }
    };
    
    node* root = new node;
    node* currentNode;
    void insert(char *str)
    {
        int i=0;
        currentNode = root;
        
        for(i=0;i<strlen(str);i++){
            int index= str[i] - 'a';
            if(currentNode->childs[index]!=NULL){
                currentNode = currentNode->childs[index];
                ++(currentNode->count);
            }else{
                currentNode->childs[index] = new node;
                currentNode = currentNode->childs[index];
                currentNode->count = 1;
            }
        }    
    }
    
    void search(char *str)
    {
        currentNode = root;
        int i;
        char res[23];
        for(i=0;i<strlen(str);i++){
            int index = str[i] - 'a';
            //if(currentNode->childs[index]!=NULL)//没有必要判断,因为根据题意,此时一定是有的
            currentNode = currentNode->childs[index];
            res[i] = str[i];
            res[i+1]='';//必须在这里加入'',因为如果没有找到,则会跳出,如果在下面的判断中加‘’会导致最后没有结尾的''.
            if(currentNode->count == 1){break;}//输出+return 或者 直接break
        }
        printf("%s %s
    ",str,res);
        return;
    }
    int main()
    {
        int i,t=0;
        while(scanf("%s",strList[t])!=EOF)
        {
            insert(strList[t]);
            t++;
        }
        for (i = 0; i < t; ++i)
        {
            search(strList[i]);
        }
        return 0;
    }
  • 相关阅读:
    (第三周)c#程序理解
    (第三周)使用visual studio 2015进行单元测试
    (第二周)软件工程第二周之四则运算
    (第二周)读《我是一只IT小小鸟》有感
    Jmeter--参数化的两种方法
    接口测试(1)
    自动化测试框架Cucumber和RobotFramework的对比
    selenium2+Python--学习进阶路线图
    Robot Framework--环境搭建(Mac)
    Selenium2+Python--python3.6 安装 xlrd 模块---Mac
  • 原文地址:https://www.cnblogs.com/yueyanglou/p/5365280.html
Copyright © 2020-2023  润新知