加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

树在scala中表示为元组

发布时间:2020-12-16 18:45:05 所属栏目:安全 来源:网络整理
导读:我正在尝试编写一个函数来计算表示为元组的树的节点. object Main { def count[T](tree:Seq[T]):Int= { if (lst == ()) 0 else count(tree(1)) + count(tree(2)) + 1 } def main(args: Array[String]) { val lst3 = (2,(6,(8,(),()),(5,())),(4,(3,(10,())))
我正在尝试编写一个函数来计算表示为元组的树的节点.

object Main {
     def count[T](tree:Seq[T]):Int= {
        if (lst == ())
            0
        else
            count(tree(1)) + count(tree(2)) + 1
    }
     def main(args: Array[String]) {
        val lst3 = (2,(6,(8,(),()),(5,())),(4,(3,(10,())))
        println(count(lst3))
    }
}

我怎样才能在scala中实现这一点?

解决方法

这不是使用元组的正确方法. Scala是一种静态类型语言,因此不应将元组用作任意对象的通用容器.

树应该用以下类来表示:

trait Tree { def value: Int }
case class Branch(value: Int,children: Seq[Tree]) extends Tree
case class Leaf(value: Int) extends Tree

然后你可以这样做:

def count(t: Tree): Int = t match {
  case Branch(v,children) => 1 + children.map(count).sum
  case Leaf(v) => 1
}

所以:

val x = Branch(7,Seq(Branch(8,Seq(Leaf(1),Leaf(2))),Leaf(3)))
count(x)  // 5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读