**Swift 枚举 简单实现 二叉搜索树

练习来自Functional Swift (objc.io)。
轻微改动。

//🌲的声明
indirect enum Tree<T> {
    case Leaf
    case Node( Tree<T>,T,Tree<T> )
}
//计算有效数据个数
func count<T>(tree: Tree<T>) -> Int {
    switch tree {
    case .Leaf:
        return 0
    case let .Node(left, _, right):
        return 1 + count(left) + count(right)
    }
}
//空🌲
func emptySet<T>() -> Tree<T> {
    return Tree.Leaf
}
//检测是否为空🌲
func isEmptySet<T>(tree: Tree<T>) -> Bool {
    switch tree {
    case .Leaf:
        return true
    case .Node(_, _, _):
        return false
    }
}
//🌲中所有有效数据集合
func elements<T>(tree: Tree<T>) -> [T] {
    switch tree {
    case .Leaf:
        return []
    case let .Node(left, x, right):
        return elements(left) + [x] + elements(right)
    }
}
//检测是否为2叉搜索🌲
func isBST<T: Comparable>(tree: Tree<T>) -> Bool {
    switch tree {
    case .Leaf:
        return true
    case let .Node(left, x, right):
        return elements(left).reduce(true){ $1 < x }
            && elements(right).reduce(true){ $1 > x }
            && isBST(left)
            && isBST(right)
    }
}
//是否包含.(此方法低效)
func setContains<T: Comparable>(value: T, tree: Tree<T>) -> Bool {
    switch tree {
    case .Leaf:
        return false
    case let .Node(left, x, right):
        if value == x {
            return true
        }else if value < x {
            return setContains(value, tree: left)
        }else{
            return setContains(value, tree: right)
        }
    }
}
//插入
func setInsert<T: Comparable>(value: T, tree: Tree<T>) -> Tree<T> {
    switch tree {
    case .Leaf:
        return Tree.Node(.Leaf, value, .Leaf)
    case let .Node(left, x, right):
        if value == x {
            return tree
        }else if value < x {
            return Tree.Node(setInsert(value, tree: left), value, right)
        }else{
            return Tree.Node(left, value, setInsert(value, tree: right))
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,269评论 4 61
  • Sundy+CRM运营+苏州 必做题: 使用"作业数据.xls" 的原始数据,分析UV来源的汇总排名,给出"来源"...
    水的语言阅读 182评论 0 0
  • 早上好!#幸福实修#~每天进步1%#幸福实修11班@吕敏一富阳 20170907(1030) 【幸福三朵玫瑰】 昨...
    嘟嘟妈妈2727阅读 261评论 5 1
  • 今天的早上我五点半就起来了,我要去济南方特。我吃了一个包子,然后我们就去车站。我们等了好长时间车才来。一共用三个小...
    唐康凯阅读 452评论 2 2