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

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

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


相关推荐

  • 【iOS】UIViewController生命周期

    【iOS】UIViewController生命周期

    2022年1月12日
    37
  • Unity3D制作3维立体小游戏

    Unity3D制作3维立体小游戏Unity3D报告,纯属个人兴趣

    2022年5月9日
    66
  • centos开启关闭防火墙(电脑防火墙关闭有什么影响)

    CentOS6:1)永久性生效,重启后不会复原开启:chkconfigiptableson关闭:chkconfigiptablesoff 2)即时生效,重启后复原service iptables status    查看防火墙状态service iptables start     开启防火墙service iptab…

    2022年4月13日
    53
  • SpringBoot面试题及答案 110道(持续更新)

    SpringBoot面试题及答案 110道(持续更新)最新SpringBoot面试题【附答案解析】SpringBoot面试题及答案,SpringBoot最新面试题及答案,SpringBoot面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,不吝赐教,谢谢~如果不背SpringBoot面试题的答案,肯定面试会挂!这套SpringBoot面试题大全,希望对大家有帮助哈~博主已将以下这些面试题整理成了一个面试手册,是PDF版的1、SpringBo

    2022年5月12日
    36
  • volatile关键字的作用和原理「建议收藏」

    volatile关键字的作用和原理「建议收藏」文章目录一、volatile关键字的作用二、volatile的底层原理三、volatile的适用场景一、volatile关键字的作用二、volatile的底层原理三、volatile的适用场景

    2022年5月31日
    36
  • mongodb联表查询_mongodb聚合查询

    mongodb联表查询_mongodb聚合查询  在使用MongoDB存储数据的时候,我们查询的时候,有时候难免会需要进行连表查询。但是MongoDB本身是非关系性数据库,连表查询,很多时候,需要我们自己在代码里手工操作。但是从MongoDB3.2版本过后,我们可以使用lookup∗∗∗进行连表查询。下面就简单介绍一下MongoDB的∗∗∗lookup∗∗∗进行连表查询。下面就简单介绍一下MongoDB的∗∗∗lookup***进行…

    2022年9月14日
    0

发表回复

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

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