我试图通过 Go 语言制作 Trie 数据结构,但不知何故它遇到了引用问题,就是这样。http://play.golang.org/p/ASSGF5Oe9R
// Package main provides ...
package main
import "fmt"
type RootTrie []Trie
type Trie struct {
subtrie []Trie
index byte
}
func (trie *Trie) Insert(data string) *Trie {
if data != "" {
if trie.index == 0 {
trie.index = data[0]
}
if next := trie.containsIndex(data[1:]); next != nil {
//Problem Point
fmt.Println(string(data[1]), "found follwing", string(data[0]))
next.Insert(data[1:])
} else {
nt := &Trie{}
trie.subtrie = append(trie.subtrie, *nt.Insert(data[1:]))
}
}
return trie
}
func (trie *Trie) containsIndex(next string) *Trie {
if next != "" {
for _, st := range trie.subtrie {
if st.index == next[0] {
return &st
}
}
}
return nil
}
func main() {
t := &Trie{}
t = t.Insert("hanyang")
fmt.Println("result:", t)
t = t.Insert("hanyKk")
fmt.Println("result:", t)
t.Insert("hanyK")
}
在我放置的第二个“插入”中发生以下问题,//Problem Point
我制作containsIndex
了搜索下一个链接的特里树的方法,它实际上搜索得很好。但是当我更新给定的next
属性时containsIndex
,它并没有影响它的母结构trie
。
我不明白的是我在返回时给了它引用类型containsIndex
,但它仍然像“复制值”一样,为什么它不影响它的母结构(trie
)?
谢谢!