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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 0xffffffff是多少?

    0xffffffff是多少?(1)正数的补码与原码相同;(2)负数的符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1,即为其补码。(总的来说:补码=原码取反+1,只不过负数带有符号位需特殊考虑。。。)—————————————————————————————————–

    2022年5月17日
    38
  • zookeeper – 数据存储结构(11)

    zookeeper – 数据存储结构(11)

    2021年6月5日
    79
  • 手机号码归属地服务[转载]「建议收藏」

    手机号码归属地服务[转载]「建议收藏」服务地址:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmxWebXml.com.cn国内手机号码归属地查询WEB服务,提供最新的国内手机号码段归属地数据,每月更新。使用本站WEB服务请注明或链接本站:http://www.webxml.com.cn/感谢大家的支持!支持下列操作。有关正式定义,请查看服务说明。…

    2022年7月22日
    11
  • js 给元素添加自定义属性

    js 给元素添加自定义属性给元素添加自定义属性obj.setAttribute(‘attr_name’,’attr_value’);//例如obj.setAttribute(‘class’,’snow-container’)给元素添加class属性的三种方法document.getElementsByTagName(‘body’)[0].className=’snow-container’;//设置为新的…

    2022年6月22日
    134
  • 树莓派4B如何手动固定IP地址

    树莓派4B如何手动固定IP地址在使用树莓派的过程中,DHCP往往会自动分配树莓派的IP,因此树莓派的IP地址并不是固定的,那么每次在远程登录树莓派前都需要查看一下树莓派的IP地址,非常麻烦。因此,我们手动给树莓派设定一个静态IP地址后,树莓派的IP地址就是固定的了。无线(热点)IP固定方法首先在无线连接下查看自己局域网的IP网段,然后在树莓派终端输入:sudonano/etc/dhcpcd.conf,也可以使用VIM编…

    2022年6月9日
    136
  • VS2005 SP1补丁下载与安装(转摘)「建议收藏」

    VS2005 SP1补丁下载与安装(转摘)「建议收藏」1.先从微软网站下载补丁.    下载地址1为:http://download.microsoft.com/download/6/3/c/63c69e5d-74c9-48ea-b905-30ac3831f288/VS80sp1-KB926601-X86-ENU.exe(英文版)    下载地址2为:http://download.microsoft.com/download

    2022年10月5日
    1

发表回复

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

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