登录
首页 >  Golang >  Go问答

Go Tour 练习 #7:二叉树等价

来源:Golang技术栈

时间:2023-04-25 19:48:06 213浏览 收藏

你在学习Golang相关的知识吗?本文《Go Tour 练习 #7:二叉树等价》,主要介绍的内容就涉及到golang,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我正在尝试在 go tour 中解决等效的二叉树练习。这就是我所做的;

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.Left != nil {
        Walk(t.Left, ch)
    }
    ch 

但是,如果树中没有更多元素,我不知道如何发出信号。我不能使用close(ch)onWalk()因为它会在发送所有值之前关闭通道(因为递归。)有人可以帮我吗?

正确答案

如果您的 Walk 函数不会自行递归,您可以使用 close() 。即步行会做:

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

walkRecurse 或多或少是您当前的 Walk 函数,但在 walkRecurse 上递归。(或者您将 Walk 重写为迭代 - 这当然更麻烦)使用这种方法,您的 Same() 函数必须了解通道已关闭,这是通过表单的通道接收完成的

k, ok1 := 

ok1当和ok2不同时采取适当的行动false

另一种方法,但可能不符合练习的精神,是计算树中的节点数:

func Same(t1, t2 *tree.Tree) bool {
    countT1 := countTreeNodes(t1)
    countT2 := countTreeNodes(t2)
    if countT1 != countT2 {
        return false
    }
    ch1 := make(chan int)
    ch2 := make(chan int)
    go Walk(t1, ch1)
    go Walk(t2, ch2)
    for i := 0; i 

您必须实现 countTreeNodes() 函数,该函数应该计算 *Tree 中的节点数

到这里,我们也就讲完了《Go Tour 练习 #7:二叉树等价》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表