• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Golang > Go语言实现的树形结构数据比较算法实例

Go语言实现的树形结构数据比较算法实例

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了go语言实例,go语言,go语言环境搭建,go语言程序设计,let it go 25种语言等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了Go语言实现的树形结构数据比较算法。分享给大家供大家参考。具体实现方法如下:

// Two binary trees may be of different shapes,
// but have the same contents. For example:
//
//        4               6
//      2   6          4     7
//     1 3 5 7       2   5
//                  1 3
//
// Go's concurrency primitives make it easy to
// traverse and compare the contents of two trees
// in parallel.

package main
import (
 "fmt"
 "rand"
)

// A Tree is a binary tree with integer values.
type Tree struct {
 Left  *Tree
 Value int
 Right *Tree
}

// Walk traverses a tree depth-first,
// sending each Value on a channel.
func Walk(t *Tree, ch chan int) {
 if t == nil {
  return
 }
 Walk(t.Left, ch)
 ch <- t.Value
 Walk(t.Right, ch)
}

// Walker launches Walk in a new goroutine,
// and returns a read-only channel of values.
func Walker(t *Tree) <-chan int {
 ch := make(chan int)
 go func() {
  Walk(t, ch)
  close(ch)
 }()
 return ch
}

// Compare reads values from two Walkers
// that run simultaneously, and returns true
// if t1 and t2 have the same contents.
func Compare(t1, t2 *Tree) bool {
 c1, c2 := Walker(t1), Walker(t2)
 for <-c1 == <-c2 {
  if closed(c1) || closed(c1) {
   return closed(c1) == closed(c2)
  }
 }
 return false
}

// New returns a new, random binary tree
// holding the values 1k, 2k, ..., nk.
func New(n, k int) *Tree {
 var t *Tree
 for _, v := range rand.Perm(n) {
  t = insert(t, (1+v)*k)
 }
 return t
}

func insert(t *Tree, v int) *Tree {
 if t == nil {
  return &Tree{nil, v, nil}
 }
 if v < t.Value {
  t.Left = insert(t.Left, v)
  return t
 }
 t.Right = insert(t.Right, v)
 return t
}

func main() {
 t1 := New(1, 100)
 fmt.Println(Compare(t1, New(1, 100)), "Same Contents")
 fmt.Println(Compare(t1, New(1, 99)), "Differing Sizes")
 fmt.Println(Compare(t1, New(2, 100)), "Differing Values")
 fmt.Println(Compare(t1, New(2, 101)), "Dissimilar")
}
</div>

希望本文所述对大家的Go语言程序设计有所帮助。

</div>

您可能想查找下面的文章:

  • Go语言字典(map)用法实例分析【创建,填充,遍历,查找,修改,删除】
  • Go语言实现的排列组合问题实例(n个数中取m个)
  • Go语言正则表达式用法实例小结【查找、匹配、替换等】
  • Go语言实现类似c++中的多态功能实例
  • GO语言的IO方法实例小结
  • go语言中的interface使用实例
  • go语言使用scp的方法实例分析
  • go语言简单的处理http请求的函数实例
  • Go语言实现顺序存储的线性表实例
  • go语言实现一个最简单的http文件服务器实例

相关文章

  • golang语言中for循环语句用法实例
  • Golang加密解密之RSA(附带php)
  • Golang排列组合算法问题之全排列实现方法
  • Go语言Echo服务器的方法
  • Go语言实现Fibonacci数列的方法
  • Golang编程实现删除字符串中出现次数最少字符的方法
  • 利用Go语言初步搭建一个web应用的教程
  • 利用Golang生成整数随机数方法示例
  • 如何使用Go语言实现远程执行命令
  • go语言里包的用法实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Golang实现的聊天程序服务端和客户端代码分享
    • Go语言并发技术详解
    • 深入理解GO语言的面向对象
    • Go语言排序与接口实例分析
    • golang简单获取上传文件大小的实现代码
    • GO语言映射(Map)用法分析
    • 在Linux系统中安装Go语言的详细教程
    • GO语言获取系统环境变量的方法
    • GO语言基础之数组
    • GO语言中的常量

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有