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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数独挑战之九宫格入门第一题解题思路

    数独挑战之九宫格入门第一题解题思路

  • error 1820 (hy000)_default configuration used

    error 1820 (hy000)_default configuration usedmysql连数据库的时候报错:1251clientdoesnotsupportauthenticationprotocolrequestedbyserver;considerupgradingMysqlclientERROR1396(HY000):OperationALTERUSERfailedfor’root’@’localhost’先登…

  • 数据库四大特性_Mysql数据库四种特性

    数据库四大特性_Mysql数据库四种特性1、原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。2、一致性(Co

  • 传奇ce刷元宝教程_ce修改器传奇刀速

    传奇ce刷元宝教程_ce修改器传奇刀速我們一把在打野怪的時候,多多少少都能夠在這個野怪的身上爆到許多的東西,其中有很小的幾率打到裝備,如果你爆到了裝備是一件非常幸運的事情呢,所以我們在玩传奇私服這款游戲的時候一定要多去野外刷怪。傳奇游戲其實本身就應該是一個獨來獨往的游戲,但是需要指出的是,在傳奇游戲當中真正獨來獨往的玩家其實并不多,除非說你的實力非常強大了。要不然的話,在傳奇游戲當中,如果是獨來獨往的話,那么想要做很多事情其實都是做不…

    2022年10月26日
  • eclipse离线安装svn插件使用教程_eclipse不显示svn插件

    eclipse离线安装svn插件使用教程_eclipse不显示svn插件【Android】Eclipsesvn插件安装说明   昨天心血来潮,因为总是有些小的测试文档修改了修改去,后来某天找代码又麻烦得很,想把本机上的所有代码管理起来,在网上度娘了下,决定在Eclipse中安装svn插件,来管理本地的源代码文档。现在附上一些安装步骤,后续的使用慢慢地摸索吧。一、安装环境:PC:windowEclipse:JunoServiceRelease

  • pycharm安装第三方库_pycharm专业版下载

    pycharm安装第三方库_pycharm专业版下载1、安装支持python的IDEPycharm专业版;2、利用edu邮箱,免费注册获取license免费使用专业版。

发表回复

您的电子邮箱地址不会被公开。

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