Thanks a lot!!! On Thursday, April 19, 2018 at 11:55:49 AM UTC-7, Bakul Shah wrote: > > Terminate Scanf format strings with \n. To see why, do "go doc fmt.Scanf". > Always check the result of (at least) any input operation such as Scanf. > > On Apr 19, 2018, at 10:31 AM, Alex Dvoretskiy <advore...@gmail.com > <javascript:>> wrote: > > Hello Golang-nuts, > > Following code reads data from file and creates binary tree structure: > > ' > // go run main.go < input > > package main > > import "fmt" > > type TreeNode struct { > Value int > Left *TreeNode > Right *TreeNode > } > > func main () { > nodes := read() > > for i, node := range(nodes) { > fmt.Printf("%p\n", &nodes[i]) > printNode(&node) > } > > //passing root node > fmt.Println(nodes) > fmt.Println(maxDepth(&nodes[len(nodes) - 1])) > } > > func maxDepth(root *TreeNode) int { > if root == nil { > return 0 > } > dl := 1 + maxDepth(root.Left) > dr := 1 + maxDepth(root.Right) > if dl > dr { > return dl > } else { > return dr > } > } > > func read() []TreeNode { > /*test := &Node{ > 1, > nil, > nil, > } > right := &Node{ > 33, > nil, > nil, > } > test.Right = right > fmt.Println(test) > printNode(test)*/ > > var N int > fmt.Scanf("%d", &N) > fmt.Println("N: ", N) > > var nodes []TreeNode = make([]TreeNode, N) > > var val, indexLeft, indexRight int > for i := 0; i < N; i++ { > fmt.Scanf("%d %d %d", &val, &indexLeft, &indexRight) > nodes[i].Value = val > if indexLeft >= 0 { > nodes[i].Left = &nodes[indexLeft] > } > if indexRight >= 0 { > nodes[i].Right = &nodes[indexRight] > } > } > > return nodes > } > > func printNode(n *TreeNode) { > fmt.Print("Value: ", n.Value) > if n.Left != nil { > fmt.Print(" Left: ", n.Left.Value) > } > if n.Right != nil { > fmt.Print(" Right: ", n.Right.Value) > } > fmt.Println() > } > ' > Code works fine on Linux64 machine, result: "[{15 <nil> <nil>} {7 <nil> > <nil>} {9 <nil> <nil>} {20 0x11958080 0x1195808c} {3 0x11958098 > 0x119580a4}]" > maxDepth = 3 > > But if, I'm runing this code on windows 32 machine, I'm getting different > result: "[{0 0x11a94000 0x11a94000} {15 <nil> <nil>} {15 <nil> <nil>} {7 > <nil> <nil>} {7 <nil> <nil>}]" > maxDepth = 1 > which is not correct. > > Go version 10.0. Windows Server Standard 2007 SP2 2007. > What is wrong? Is it a bug? Or something wrong with my code? > > > This is something to do with fmt.Scanf > > When I don't read data from file using fmt.Scanf the code works fine on > both machines: > https://play.golang.org/p/Rhi5jJKGYjX > > Please advise. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts...@googlegroups.com <javascript:>. > For more options, visit https://groups.google.com/d/optout. > >
-- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.