Scala 二叉树

论坛 期权论坛 期权     
DiKiTai   2018-4-26 13:45   3684   1
sealed abstract class Tree
case class mkTree(x: Int, Left: Tree, Right: Tree) extends Tree
case object Empty extends Tree

//插入新的元素  但是要生成一个新的数 叫t' 该怎么写?
def insert (x: Int, t: Tree): Tree = {
   
    t match{
...sealed abstract class Tree
case class mkTree(x: Int, Left: Tree, Right: Tree) extends Tree
case object Empty extends Tree

//插入新的元素  但是要生成一个新的数 叫t' 该怎么写?
def insert (x: Int, t: Tree): Tree = {

    t match{
    case Empty=> mkTree(x,Empty,Empty)
    case mkTree(v,left,right) if x< v =>
      mkTree(v,insert(x,left),right)
    case mkTree(v,left,right) if x>v  =>
      mkTree(v,left,insert(x,right))
    case mkTree(v,left,right) =>
      t
    }

  }
//现在我又要写一个方法叫 mkBST 用 order 和 numberlist: list 来生成一棵树 该怎么写? 谢谢展开
分享到 :
0 人收藏

1 个回复

倒序浏览
2#
manyfaces  4级常客 | 2018-4-30 02:07:45 发帖IP地址来自
///用foldLeft就可以了,我重新定义了泛型,应该比较完美了
trait Tree[+T]
/**
* 空树
*/
case object Empty extends Tree[Nothing]
/**
* 节点, 单个节点是一棵树
*/
case class Node[T](val value: T, val left: Tree[T], val right: Tree[T]) extends Tree[T]

////////////////////////

def insert[T](x: T, tree: Tree[T])(implicit order: Ordering[T]): Tree[T] = {
    tree match {
      case Empty => Node(x, Empty, Empty)
      case Node(v, left, right) if order.gt(x, v) => Node(v, left, insert(x, right))
      case Node(v, left, right) if order.lt(x, v) => Node(v, insert(x, left), right)
      case Node(v, left, right) if order.equiv(x, v) => Node(v, left, right) //其实没有必要重新创建

    }
  }
  def mkBinarySearchTree[T](list: List[T])(implicit order: Ordering[T]) = {
    list.foldLeft[Tree[T]](Empty)((tree, value) => insert(value, tree))
  }
  def main(args: Array[String]) {
    mkBinarySearchTree(List(1, 2, 3))
  }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP