我是Golang的初学者并尝试构建二进制搜索树。我的源代码:
package main
import (
"fmt"
"math/rand"
"time"
)
type Node struct{
value int
left *Node
right *Node
}
func insert(root *Node,v int){
if root==nil{
root=&Node{v,nil,nil}
} else if v<root.value{
insert(root.left,v)
} else{
insert(root.right,v)
}
}
func inTraverse(root *Node){
if (root==nil){
return
}
inTraverse(root.left)
fmt.Printf("%d",root.value)
inTraverse(root.right)
}
func main() {
var treeRoot *Node
rand.Seed(time.Now().UnixNano())
n:=6
var a[6]int
for i:=0;i<n;i++{
a[i]=rand.Intn(20)+1
}
fmt.Println("Array of integer: ")
for i:=0;i<n;i++{
fmt.Printf("%d ",a[i])
}
fmt.Println()
for i:=0;i<n;i++{
insert(treeRoot,a[i])
}
inTraverse(treeRoot)
fmt.Println()
}
结果显示空树。我的代码出了什么问题? Golang是否具有按值传递或按引用传递?请帮我解决这个问题。
答案 0 :(得分:2)
Go始终按值传递参数。你应该写:
func insert(root *Node,v int) *Node {
if root == nil{
root = &Node{v,nil,nil}
} else if v<root.value{
root.left = insert(root.left,v)
} else{
root.right = insert(root.right,v)
}
return root
}
和
for i:=0;i<n;i++{
treeRoot = insert(treeRoot,a[i])
}