Advertisement
Guest User

tree1

a guest
Aug 3rd, 2014
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.68 KB | None | 0 0
  1. sealed abstract class Tree[+T]{
  2.     def addValue[ U >: T <% Ordered[U] ](value:U):Tree[U]
  3.     def isMirrowOf[V](tr:Tree[V]):Boolean
  4.     def append[ U >: T <% Ordered[U] ](tr:Tree[U]):Tree[U]
  5.     def isSymmetry:Boolean
  6.     def isEmpty:Boolean
  7.     val height:Int
  8. }
  9. case class Node[+T](val value: T, val left: Tree[T], val right: Tree[T]) extends Tree[T] {
  10.   override def toString = "T(" + value.toString + " " + left.toString + " " + right.toString + ")"
  11.  
  12.   def addValue[ U >: T <% Ordered[U] ](item:U):Tree[U] = {
  13.     if(item>value) Node(value,left,right.addValue(item))
  14.     else if(item<value) Node(value,left.addValue(item),right)
  15.     else this
  16.   }
  17.   /* Return: a new height-balanced tree   */
  18.   def heightBalanced[ U >: T <% Ordered[U] ]:Tree[U] = {
  19.     val lh = left.height
  20.     val rh = right.height
  21.     if( math.abs(lh-rh)<=1 ) this
  22.     else if(rh>lh) left append right addValue value
  23.     else right append left addValue value
  24.   }
  25.   /*
  26.   tree.scala:26: error: No implicit view available from T => Ordered[T].
  27.         else if(rh>lh) left append right addValue value
  28.                                   ^
  29.   tree.scala:27: error: No implicit view available from T => Ordered[T].
  30.           else right append left addValue value
  31.                      ^
  32.   */
  33.   def append[ U >: T <% Ordered[U] ](tr:Tree[U]):Tree[U] = tr match {
  34.     case tr:Node[U] => this addValue tr.value append tr.left append tr.right
  35.     case _ => this
  36.   }
  37.  
  38.   val height = 1 + ( left.height max right.height )
  39. }
  40. case object End extends Tree[Nothing] {
  41.   override def toString = "."
  42.   def addValue[U <% Ordered[U]](value:U) = Node(value)
  43.   val height = 0
  44. }
  45. object Node {
  46.   def apply[T](value: T): Node[T] = Node(value, End, End)
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement