我正在尝试在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)