doujiayao8433 2015-09-26 16:50
浏览 21
已采纳

Golang二叉树搜索算法翻译

I'm beginner to Golang and trying to build a Binary Search Tree. My source code to do it:

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

The result shows an empty tree. What's wrong with my code? Does Golang have pass-by-value or pass-by-reference? Please help me solve this.

  • 写回答

1条回答 默认 最新

  • doubao6681 2015-09-26 18:18
    关注

    Go always passes parameters by value. You should rather write:

    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
    }
    

    and:

    for i:=0;i<n;i++{
        treeRoot = insert(treeRoot,a[i])
    }
    

    See the result at: http://play.golang.org/p/94H_l3rfSH

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 对于这个问题的算法代码
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据