• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go语言实现的树形结构数据比较算法实例

    本文实例讲述了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")
    }

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

    您可能感兴趣的文章:
    • Go语言算法之寻找数组第二大元素的方法
    • Golang算法问题之数组按指定规则排序的方法分析
    • Golang排列组合算法问题之全排列实现方法
    • 详解Go语言运用广度优先搜索走迷宫
    上一篇:Go语言文件操作的方法
    下一篇:Golang 内存模型详解(一)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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