字典树

package main 
import (
	"fmt"
)
type TrieNode struct {
	Child map[interface{}]*TrieNode
	IsEnd bool
}
func NewTrieNode()*TrieNode{
	return &TrieNode{Child:make(map[interface{}]*TrieNode),IsEnd:false}
}
type Trie struct {
	Root *TrieNode
}
func NewTrie()*Trie{
	return &Trie{Root:NewTrieNode()}
}
func (t *Trie) Insert(str []interface{}) {
	root := t.Root
	for i := 0; i < len(str); i++{
		_, ok := root.Child[str[i]]
		if !ok {
			root.Child[str[i]] = NewTrieNode()
		}
		root = root.Child[str[i]]
	}
	root.IsEnd = true
}
func (t *Trie) Match(str []interface{})bool{
	root := t.Root
	for i := 0; i < len(str); i++{
		_, ok := root.Child[str[i]]
		if !ok {
			return false
		} else {
			root = root.Child[str[i]]
		}
	}
	return root.IsEnd
}
func (t *Trie) MatchPrefix(prefix []interface{})bool{
	root := t.Root
	for i := 0; i < len(prefix); i++{
		_, ok := root.Child[prefix[i]]
		if !ok {
			return false
		} else {
			root = root.Child[prefix[i]]
		}
	}
	return true
}
//遍历树
func (t *Trie) Traverse(){
	root := t.Root
	traverse(root) 
}
func traverse(root *TrieNode){
	if root == nil {
		return
	}
	for i := range root.Child{
		fmt.Printf("%c", i)
		fmt.Println()
	}
	for _, v := range root.Child {
		traverse(v)
	}
	
}
func main(){
	trie := NewTrie()
	str := []interface{}{'a','b','c'}
	str1 := []interface{}{'a','b','d','e'}
	str2 := []interface{}{'b','c','f','g'}
	str3 := []interface{}{'c','f','g'}
	//str4 := []interface{}{'a','b'}

	trie.Insert(str)
	trie.Insert(str1)
	trie.Insert(str2)
	trie.Insert(str3)
	
	//fmt.Println(trie.Match(str4))
	//fmt.Println(trie.MatchPrefix(str4))
	trie.Traverse()
	fmt.Println()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值