2015-09-26 63 views
1

我是Golang的初學者,嘗試構建二叉搜索樹。我的源代碼這樣做: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是否具有傳值或傳遞參考?請幫我解決這個問題。

+1

請不要問的教程或異地堆棧溢出引用。這總是會導致你的問題被關閉。 – fuz

回答

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]) 
} 

看到的結果:http://play.golang.org/p/94H_l3rfSH