首页 > 解决方案 > golang return []*TreeNode{} 和 return []*TreeNode{nil} 有什么区别

问题描述

我是golang的新手,对以下内容感到困惑,

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

func test() []*TreeNode {

    return []*TreeNode{}
}

func test1() []*TreeNode {

    return []*TreeNode{nil}
}

我正在尝试在 TreeNode 上编写一个递归函数,但是,如果我使用该test样式来表示叶节点,我将从调用者函数中获得一个空的 TreeNode 切片。

如果我使用test1来表示叶节点,那么行为就是我想要的。

我觉得对于test1,它给了我一个指向空 TreeNode 的点,但是,test代码给了我一个点nil......我不确定我是否做对了。您能否指出我要挖掘的正确术语或概念,它会很棒。

另外,如果您可以让我更多地了解下划线逻辑,那就太好了。

提前致谢。

标签: pointersgorecursion

解决方案


这将返回一个空切片:

return []*TreeNode{}

这将返回一个包含一个元素的切片,该元素是一个 nil 指针:

return []*TreeNode{nil}

这些都没有给你一个TreeNode虽然。第二个给你一个 TreeNode 指针,它是 nil。您如何解释这些取决于代码的其余部分,但我怀疑两者是否真的是您想要的,因为没有人可以拥有该val字段。


推荐阅读