美文网首页
Go并发 - 二叉查找树是否相同

Go并发 - 二叉查找树是否相同

作者: jeff98 | 来源:发表于2019-03-02 11:23 被阅读0次

在做A Tour of Go的时候遇到的并发的问题,具体问题看这里 (不过就是需要翻墙)。题目所生成的二叉树总是等长的,这就很好解决,这位CSDN博主就给出了很好的解决方案。但我想的是:如果树不等长呢? 我这里给出了一个解决方案

package main

import (
    "fmt"
    "golang.org/x/tour/tree"
)

// Walk 步进 tree t 将所有的值从 tree 发送到 channel ch。
func Walk(t *tree.Tree, ch chan int, depth int) {
    // dfs, in-order
    if t == nil {
        return
    }
    Walk(t.Right, ch, depth+1)
    ch <- t.Value
    Walk(t.Left, ch, depth+1)
    
    if depth == 0 {
        close(ch)
    }
}

// Same 检测树 t1 和 t2 是否含有相同的值。
func Same(t1, t2 *tree.Tree) bool {
    c1 := make(chan int)
    c2 := make(chan int)
    go Walk(t1, c1, 0)
    go Walk(t2, c2, 0)
    for{
        x,o1 := <-c1
        y,o2 := <-c2
        if !o1 || !o2 {
            if o1 != o2 {
                //树结点数目不一
                return false;
            } else{
                break;
            }
        }
        if x != y {
            return false
        }
    }
    return true
}

func main() {
    t := tree.New(1)
    m := tree.New(1)
    fmt.Println(Same(t,m))
}

相关文章

  • Go并发 - 二叉查找树是否相同

    在做A Tour of Go的时候遇到的并发的问题,具体问题看这里 (不过就是需要翻墙)。题目所生成的二叉树总是等...

  • 二叉查找树

    1)二叉查找树是什么?2)二叉查找树的插入、删除、查找?3)Go代码实现 一、二叉查找树是什么?二叉查找树(BST...

  • 判断一棵树是否是搜索二叉树、判断一棵树是否是完全二叉树

    题目描述 判断一棵树是否是搜索二叉树、判断一棵树是否是完全二叉树 什么是二叉查找树? 二叉查找树(Binary S...

  • Swift-二叉查找树判断

    题目:检查一棵二叉树是否为二叉查找树. 解法一 中序遍历之后,如果数组是有序,那么二叉树是二叉查找树. ` ...

  • swift 二叉树

    二叉树 创建二叉查找树 前序 中序 后序 遍历(递归/非递归) 深度 判断是否为二叉平衡树 判断是否为二叉平衡树 ...

  • 极客时间数据结构与算法之美笔记25~26

    二叉树到二叉查找树,是为了查找数据的效率接近logN。 二叉查找树到平衡二叉查找树,是为了防止二叉查找树沦为链表。...

  • golang实现二叉查找树

    为简单起见,键值均为整型。 定义接口(tree.go): 二叉查找树(binary_tree.go): 节点(no...

  • 二叉树的相似、镜像问题

    二叉树的镜像: 100.Same Tree(二叉树是否相同) 101.Symmetric Tree(二叉树是否对称)

  • 二叉排序树

    1、二叉树的二叉链表结点结构定义 2、二叉排序树--查找 递归查找二叉排序树T中,是否存在key;指针f指向T的双...

  • 红黑树

    红黑树的本质就是一棵二叉查找树,所以先从二叉查找树来了解起。 二叉查找树 二叉查找树又称有序二叉树,具有以下特性:...

网友评论

      本文标题:Go并发 - 二叉查找树是否相同

      本文链接:https://www.haomeiwen.com/subject/baleuqtx.html