go 判断两棵树内容是否一致

简介: go 判断两棵树内容是否一致

goroutine

http://127.0.0.1:3999/concurrency/8

question

使用 go 判断 两个 树 存放的 序列 是否 相同, 如果 相同 他们 被称为 equivalent_tree

tree struct

type Tree struct {
    Left  *Tree
    Value int
    Right *Tree
}

由于 递归的 写法 比较简单, 此处 使用循环的 形式 来实现.

因为 循环的 写法 不存在 调用栈的 瓶颈, 所以 在实际工程中, 能够 避免 递归 还是 避免递归吧.

judge tree

package main
import "golang.org/x/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) {
  _ts := make(chan *tree.Tree, 100)
  _ts <- t
OuterLoop:
  for {
    _f1 := func(_tmp *tree.Tree) {
      fmt.Println(_tmp.Value)
      ch <- _tmp.Value
      for _, v := range []*tree.Tree{_tmp.Left, _tmp.Right} {
        if v != nil {
          _ts <- v
        }
      }
    }
    select {
    case _tmp := <-_ts:
      _f1(_tmp)
    default:
      fmt.Println("break")
      break OuterLoop
    }
  }
}
// Same determines whether the trees
// t1 and t2 contain the same values.
func Same(t1, t2 *tree.Tree) bool {
  return true
}
func main() {
  _t1 := tree.New(1)
  _c1 := make(chan int, 100)
  Walk(_t1, _c1)
  _t2 := tree.New(1)
  _c2 := make(chan int, 100)
  Walk(_t2, _c2)
  fmt.Println(_c)
}
相关文章
|
12月前
|
XML 数据可视化 Go
go语言|数据结构:二叉树可视化(svg树形图改进版)
go语言|数据结构:二叉树可视化(svg树形图改进版)
447 0
|
12月前
|
XML 编解码 算法
go语言|数据结构:二叉树可视化(制作svg格式树形图)
go语言|数据结构:二叉树可视化(制作svg格式树形图)
11158 2
|
12月前
|
自然语言处理 Go
Go语言学习编程实践:实现简易计算器(包含词法器、语法树构建)
Go语言学习编程实践:实现简易计算器(包含词法器、语法树构建)
114 0
每日一题 --- 590. N 叉树的后序遍历[力扣][Go]
每日一题 --- 590. N 叉树的后序遍历[力扣][Go]
每日一题 --- 590. N 叉树的后序遍历[力扣][Go]
每日一题 --- 589. N 叉树的前序遍历[力扣][Go]
每日一题 --- 589. N 叉树的前序遍历[力扣][Go]
每日一题 --- 589. N 叉树的前序遍历[力扣][Go]
|
1天前
|
Java Go
一文带你速通go语言指针
Go语言指针入门指南:简述指针用于提升效率,通过地址操作变量。文章作者sharkChili是Java/CSDN专家,维护Java Guide项目。文中介绍指针声明、取值,展示如何通过指针修改变量值及在函数中的应用。通过实例解析如何使用指针优化函数,以实现对原变量的直接修改。作者还邀请读者加入交流群深入探讨,并鼓励关注其公众号“写代码的SharkChili”。
8 0
|
1天前
|
存储 缓存 Java
来聊聊go语言的hashMap
本文介绍了Go语言中的`map`与Java的不同设计思想。作者`sharkChili`是一名Java和Go开发者,同时也是CSDN博客专家及JavaGuide项目的维护者。文章探讨了Go语言`map`的数据结构,包括`count`、`buckets指针`和`bmap`,解释了键值对的存储方式,如何利用内存对齐优化空间使用,并展示了`map`的初始化、插入键值对以及查找数据的源码过程。此外,作者还分享了如何通过汇编查看`map`操作,并鼓励读者深入研究Go的哈希冲突解决和源码。最后,作者提供了一个交流群,供读者讨论相关话题。
9 0
|
2天前
|
Java Go
Go语言学习11-数据初始化
【5月更文挑战第3天】本篇带大家通过内建函数 new 和 make 了解Go语言的数据初始化过程
16 1
Go语言学习11-数据初始化
|
3天前
|
自然语言处理 安全 Java
速通Go语言编译过程
Go语言编译过程详解:从词法分析(生成token)到句法分析(构建语法树),再到语义分析(类型检查、推断、匹配及函数内联)、生成中间码(SSA)和汇编码。最后,通过链接生成可执行文件。作者sharkchili,CSDN Java博客专家,分享技术细节,邀请读者加入交流群。
21 2