我正在尝试在GO中实现深度优先搜索,我面临以下问题。
在GO中,每当我们将切片传递给函数时,它都应该创建一个新的切片标题,因为GO是按值语言传递的,但同时新创建的切片应该指向前一个切片指向的同一基础数组。
但看起来在我的深度第一个搜索函数中,传递的切片不指向同一个数组。
正如我们在下面提到的代码中看到的那样,我以递归方式调用深度优先遍历函数,并将节点和切片作为参数,其中seft存储每个访问节点的值。遍历整个树后,我应该得到切片中的所有节点,但切片是空的。
func (b *BinarySearchTree) DFSInOrder(node *Node, list []int) {
if node.Left != nil {
b.DFSInOrder(node.Left, list)
}
list = append(list, node.Value)
if node.Right != nil {
b.DFSInOrder(node.Right, list)
}
}
func main() {
//...
//BinarySearchTree creation code
//...
var list []int
b.DFSInOrder(b.Root, list)
fmt.Println()
fmt.Println("List after traversing:", list)
}
理想情况下,在每个递归调用中,即使它正在创建新切片,它也应该更新相同的基础数组,最后原始切片应具有所有节点,但它是空的。
有人能解释一下为什么会发生这种情况吗?
请在此处找到完整代码以获取更多详细信息:https://play.golang.com/p/PCrADg3zYV8 第51行的
检查功能。
注意:如果我传递切片指针,那么它工作正常。(list *[]int)