c# 字典树_c++树的遍历

c# 字典树_c++树的遍历c#入门Trie基于SortedDictionary添加查询非递归实现递归实现前缀基于SortedDictionary添加查询非递归实现递归实现前缀publicclassTrie{privateclassNode{publicboolIsWord;publicSortedDictionary<char,Node>Next;publicNode(boolisWord)


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Trie

添加

IsWord表示一个单词的结束
单词字母内容由 平衡二叉树 存储

查询

非递归实现

递归实现

前缀

Ternary Search Trie

待更新
在这里插入图片描述

public class Trie
{ 
   
    private class Node
    { 
   
        public bool IsWord;
        public SortedDictionary<char, Node> Next;

        public Node(bool isWord)
        { 
   
            IsWord = isWord;
            Next = new SortedDictionary<char, Node>();
        }

        public Node():this(false)
        { 
   
            
        }
    }

    private Node root;
    private int size;

    public Trie()
    { 
   
        root = new Node(false);
        size = 0;
    }

    public int Size()
    { 
   
        return size;
    }

    // 向 Trie 中添加一个 单词
    public void Add(string word)
    { 
   
        Node cur = root;
        foreach (var ch in word)
        { 
   
            if (!cur.Next.ContainsKey(ch))
                cur.Next[ch] = new Node(false);
            cur = cur.Next[ch];
        }

        if (cur.IsWord) return;

        cur.IsWord = true;
        ++size;
    }

    // 查询单词是否在 Trie 中 非递归实现
    public bool Contains(string word)
    { 
   
        Node cur = root;
        foreach (var ch in word)
        { 
   
            if (!cur.Next.ContainsKey(ch))
                return false;
            cur = cur.Next[ch];
        }

        return cur.IsWord;
    }
    // 递归实现
	public bool ContainsRecursive(string word)
    { 
   
        return Contains(root, word, 0);
    }

    private bool Contains(Node node, string str, int index)
    { 
   
        if (index > str.Length - 1)
            return node.IsWord;
        if (!node.Next.ContainsKey(str[index]))
            return false;
        return Contains(node.Next[str[index]], str, ++index);
    }

    public bool IsPrefix(string prefix)
    { 
   
        Node cur = root;
        foreach (var ch in prefix)
        { 
   
            if (!cur.Next.ContainsKey(ch))
                return false;
            cur = cur.Next[ch];
        }

        return true;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197734.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 欧拉 函数

    欧拉 函数欧拉函数一、欧拉函数引入二、欧拉函数的定义三、欧拉函数一些公式,性质四、三种求解方法五、题目一、欧拉函数引入什么是互质如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。什么是欧拉函数任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系。计算这个值的方法叫做欧拉函数,用φ(n)表示。例如,在1到8之中,与8形成互质关系的是1、3、5、7,所以φ(n)

    2022年8月22日
  • sbc音频编解码是什么_人工智能fpga算法工程师

    sbc音频编解码是什么_人工智能fpga算法工程师转自:https://blog.csdn.net/wzz4420381/article/details/48676921原作者:wzz44203811.SBC算法简介SBC是subbandcode的缩写,也可称为子带编码 在A2DP协议中,SBC算法是默认支持的 蓝牙SBC算法是一种以中等比特率传递高质量音频数据的低计算复杂度的音频编码算法1.1算法基本框图SB…

    2022年9月11日
  • rfid-rc522使用教程_RFID读写方式是什么

    rfid-rc522使用教程_RFID读写方式是什么文章目录1、RC522驱动原理2、手机APP查看卡信息3、驱动移植4、读写卡1、RC522驱动原理2、手机APP查看卡信息这里我参考的这篇博主的文章,讲的还是蛮详细的:https://blog.csdn.net/Ikaros_521/article/details/115958888使用的APP如下所示:可以按照软件操作读取一个卡的信息如下所示,可以看到他是16个扇区,每个扇区有四个块,所以就一共是64块,储存的信息数量是1024byte,计算方式为16416=1024。下面的几页信息如

    2022年9月19日
  • std::ostringstream的用法

    std::ostringstream的用法原文:ostringstream的用法使用stringstream对象简化类型转换为什么要学习进入stringstream你的编译器支持吗?string到int的转换重复利用stringstream对象在类型转换中使用模板结论一些实例例子一:基本数据类型转换例子int转string例子二:除了基本类型的转换,也支持char*的转换。例子三:再进行多次转换的时候,必须调用stringstre…

    2022年6月15日
  • django textfield_微擎应用模块源码

    django textfield_微擎应用模块源码前言上一篇分析了请求模块的源码,如下:definitialize_request(self,request,*args,**kwargs):"""Retu

    2022年7月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号