有一个TreeSort,代码如下
```
type tree struct {
value int
left, right *tree
}
func TreeSort(arr []int) {
var root *tree
for _, v := range arr {
root = add(root, v)
}
appendValues(arr[:0], root)
}
func appendValues(arr []int, root *tree) []int {
if root != nil {
arr = appendValues(arr, root.left)
arr = append(arr, root.value)
arr = appendValues(arr, root.right)
}
return arr
}
func add(root *tree, v int) *tree {
if root == nil {
root = new(tree)
root.value = v
return root
}
if v < root.value {
root.left = add(root.left, v)
} else {
root.right = add(root.right, v)
}
return root
}
```
想把它改写成函数add函数不需要有返回值的方法,应该如何实现呢?
我如果这么写
```
func add(root *tree, v int) {
if root == nil {
root = new(tree)
root.value = v
return
}
if v < root.value {
add(root.left, v)
} else {
add(root.right, v)
}
}
```
调试发现每次进来root都是nil,比较疑惑,函数要通过指针修改结构体一定是有返回值的那种写法吗
@damao33</a> 你在内部对root的赋值不会影响外部root,想要改变root指向,应该是\*root=XXX,但是你root为nil,无法做\*操作,你看下面这种
```
func fn(root *Node) {
*root = Node{value: 10}
}
func main() {
var root *Node
root = &Node{
value: 1,
}
fn(root)
fmt.Println(root.value)
}```
#3
更多评论