猿问

去游览树比较不起作用吗?

我完成了用于树比较的巡回练习(#69),并且能够有效地比较两棵树。这是代码


    package main


    import "tour/tree"

    import "fmt"

    // Walk walks the tree t sending all values

    // from the tree to the channel ch.

    func Walk(t *tree.Tree, ch chan int) {

        if t == nil {

            return

        }

        Walk(t.Left,ch)

        ch <- t.Value

        Walk(t.Right,ch)

    }


    // Same determines whether the trees

    // t1 and t2 contain the same values.

    func Same(t1, t2 *tree.Tree) bool {

        c := make(chan int)

        c2 := make(chan int)

        go Walk(t1,c)

        go Walk(t2,c2)

        for i:= 0; i < 10; i++ {

            if <-c != <-c2 {

                return false

            }

        }

        return true

    }


    func main() {

        fmt.Println(Same(tree.New(1),tree.New(1)))

    }

令我感到困惑的部分是,如果我将走动功能中的命令顺序切换为


    ch <- t.Value

    Walk(t.Right,ch)

    Walk(t.Left,ch)

比较不再有效。我尝试两次打印Walk(tree.New(1),c)的结果,奇怪的是打印了第一个电话


    10,5,7,9...

同时打印Walk(tree.New(1),c)的第二次调用


    7,9,10,8...

为什么在切换步行命令的顺序时两次调用同一函数会导致两个不同的输出?


千巷猫影
浏览 189回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答