ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

搜索树/ trie时返回多个节点?

2019-12-01 17:09:40  阅读:165  来源: 互联网

标签:tree suffix-tree c


我构建了一个后缀特里,这是一棵包含字符串的所有后缀的树,其中每个节点仅包含一个字符,并且在每个路径的末尾都有一个SuffixNode,该后缀包含字符串中后缀的位置.

假设我的trie包含单词“ Cat”,“ Car”和“ Can”,并且我要搜索“ Ca”,结果应该返回3个后缀节点,因为在3个不同的地方都找到了搜索字符串.我设法在树中搜索“ Ca”,但是一旦到达该点,我便不知道如何继续遍历“ a”节点的子节点以查找所有后缀节点.

我当时在考虑使用某种集合将后缀节点添加到该集合中,然后返回该集合.这种方法有意义吗,还是有更好的解决方案?

我已经解决了下面的搜索问题.它不返回任何节点的原因与树的创建以及节点之间的差异有关:

public void SearchTrie(Node parent, String s, List<SuffixNode> suffixes)
    {
        Node n = FindNode(parent, s);
        FindSuffixes(n, suffixes);
    }

    private void FindSuffixes(Node parent,List<SuffixNode> suffixes)
    {            
        if (parent is SuffixNode)
        {
            suffixes.Add((SuffixNode)parent);
        }
        else
        {
            foreach (KeyValuePair<char, Node> child in parent.children)
            {
                FindSuffixes(child.Value, suffixes);
            }
        }
    }

    private Node FindNode(Node parent, String s)
    {
        if ((s.Length == 1) && parent.children.ContainsKey(s[0]))
        {
            Node n = parent.children[s[0]];
            return n;
        }

        while (s[0].ToString() != "")
        {
            if (parent.children.ContainsKey(s[0]))
            {
                if ((s.Length > 1))
                {
                    return FindNode(parent.children[s[0]], s.Substring(1));
                }

            }
            else
            {
                break;
            }

        }

        return null;
    }

节点:

class Node
{
    public char label;
    public Node parent;
    public Dictionary<char,Node> children;

    public Node(Node NewParent, char NewLabel)
    {
        this.parent = NewParent;
        this.label = NewLabel;
        children=new Dictionary<char,Node>();
    }
}

解决方法:

I was thinking of using some sort of collection to add the suffix nodes to and then return the collection.

那将是第一选择.

…, or are there better solutions?

还有其他解决方案,例如

>填写呼叫者提供的列表
>使用带有收益回报的迭代器块

但是,如果没有任何特殊要求,请填写List< string>并将其作为IEnumerable< string>返回.

标签:tree,suffix-tree,c
来源: https://codeday.me/bug/20191201/2082007.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有