1
1
package tree
2
2
3
- import "fmt"
4
-
5
3
type Trie struct {
6
4
node map [rune ]* Trie
5
+ val string
7
6
isLast bool
8
7
}
9
8
@@ -19,6 +18,7 @@ func (t *Trie) Insert(word string) {
19
18
}
20
19
t = t .node [v ] //找到节点,跳到下一个节点
21
20
}
21
+ t .val = word
22
22
t .isLast = true
23
23
}
24
24
@@ -42,40 +42,29 @@ func (t *Trie) StartsWith(prefix string) bool {
42
42
return true
43
43
}
44
44
45
- func (t * Trie ) GetAll (prefix string ) * []interface {} {
46
- data := new ([]interface {})
47
- node := map [rune ]* Trie {}
48
- for _ , v := range prefix { //找到全匹配下的节点
49
- if t .node [v ] != nil {
50
- if t .node [v ].isLast { //判断当前节点是不是一个完整单词
51
- * data = append (* data , prefix )
52
- }
53
- t = t .node [v ] //跳到下一个节点
54
- node = t .node
55
-
45
+ //查找数据
46
+ func (t * Trie ) SearchNode (key string ) (res []interface {}) {
47
+ root := t
48
+ for _ , v := range key {
49
+ if v , ok := root .node [v ]; ok {
50
+ root .node = v .node
51
+ } else {
52
+ return
56
53
}
57
54
}
58
- getNodeAll (prefix , node , data )
59
- return data
60
- }
61
-
62
- var a string
63
-
64
- func getNodeAll (prefix string , node map [rune ]* Trie , data * []interface {}) {
65
- fmt .Println ("---------------------- prefix " , prefix )
66
- for k , v := range node {
67
- fmt .Println ("---------------------- prefix v1 " , prefix )
68
-
69
- prefix = prefix + string (k )
70
- fmt .Println ("---------------------- prefix v2 " , prefix )
71
- //fmt.Println(string(k),prefix)
72
- if v .isLast {
73
- fmt .Println ("---------------------- 获得结果" , prefix )
74
- * data = append (* data , prefix )
75
- }
76
- if v .node != nil {
77
- fmt .Println ("---------------------- getNodeAll" , prefix )
78
- getNodeAll (prefix , v .node , data )
55
+ var queue []* Trie
56
+ queue = append (queue , root )
57
+ for len (queue ) > 0 {
58
+ var childQueue []* Trie
59
+ for _ , v := range queue { //遍历这层的数据
60
+ if v .isLast {
61
+ res = append (res , v .val )
62
+ }
63
+ for _ , vi := range v .node { //把下一次的数据进行遍历
64
+ childQueue = append (childQueue , vi )
65
+ }
79
66
}
67
+ queue = childQueue
80
68
}
69
+ return
81
70
}
0 commit comments