def insert
(newDatum
: Int
): Tree
= { Node(datum, left, right insert newDatum)
Node(datum, left insert newDatum, right)
}
def fold
[A
](init
: A
)(fn
: (A,Int
) => A
): A
= this.
isEmpty match { case false => (right fold fn
((left fold init
)(fn
), datum
))(fn
) }
def merge
(t
: Tree
) = (this fold t
)(_ insert
_) }
override def insert
(newDatum
: Int
) = Node
(newDatum, Empty, Empty
) }
}
def apply
(data
: Int
*) = (data foldLeft
(Empty
: Tree
))(_ insert
_) }
println(Tree(5,2,3))
println(Tree(5,2,3) merge Tree(6,2,4))
}
b2JqZWN0IE1haW4gZXh0ZW5kcyBBcHAgewogICAgYWJzdHJhY3QgY2xhc3MgVHJlZSB7CiAgICAgICAgdmFsIGRhdHVtOiBJbnQKICAgICAgICB2YWwgbGVmdDogVHJlZQogICAgICAgIHZhbCByaWdodDogVHJlZQogICAgICAgIAogICAgICAgIGRlZiBpc0VtcHR5OiBCb29sZWFuCiAgICAgICAgCiAgICAgICAgZGVmIGluc2VydChuZXdEYXR1bTogSW50KTogVHJlZSA9IHsKICAgICAgICAgICAgaWYoZGF0dW0gPCBuZXdEYXR1bSkKICAgICAgICAgICAgICAgIE5vZGUoZGF0dW0sIGxlZnQsIHJpZ2h0IGluc2VydCBuZXdEYXR1bSkKICAgICAgICAgICAgZWxzZSBpZihkYXR1bSA+IG5ld0RhdHVtKQogICAgICAgICAgICAgICAgTm9kZShkYXR1bSwgbGVmdCBpbnNlcnQgbmV3RGF0dW0sIHJpZ2h0KQogICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgdGhpcwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWYgZm9sZFtBXShpbml0OiBBKShmbjogKEEsSW50KSA9PiBBKTogQSA9IHRoaXMuaXNFbXB0eSBtYXRjaCB7CiAgICAgICAgICAgIGNhc2UgZmFsc2UgPT4gKHJpZ2h0IGZvbGQgZm4oKGxlZnQgZm9sZCBpbml0KShmbiksIGRhdHVtKSkoZm4pCiAgICAgICAgICAgIGNhc2UgXyA9PiBpbml0CiAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICBkZWYgbWVyZ2UodDogVHJlZSkgPSAodGhpcyBmb2xkIHQpKF8gaW5zZXJ0IF8pCiAgICAgICAgb3ZlcnJpZGUgZGVmIHRvU3RyaW5nID0gKHRoaXMgZm9sZCAiIikoXyArIF8gKyAiLCAiKQogICAgfQogICAgCiAgICBvYmplY3QgRW1wdHkgZXh0ZW5kcyBUcmVlIHsKICAgICAgICBsYXp5IHZhbCByaWdodCA9IHRocm93IG5ldyBFeGNlcHRpb24oKQogICAgICAgIGxhenkgdmFsIGxlZnQgPSB0aHJvdyBuZXcgRXhjZXB0aW9uKCkKICAgICAgICBsYXp5IHZhbCBkYXR1bSA9IHRocm93IG5ldyBFeGNlcHRpb24oKQogICAgICAgIAogICAgICAgIGRlZiBpc0VtcHR5ID0gdHJ1ZQogICAgICAgIAogICAgICAgIG92ZXJyaWRlIGRlZiBpbnNlcnQobmV3RGF0dW06IEludCkgPSBOb2RlKG5ld0RhdHVtLCBFbXB0eSwgRW1wdHkpCiAgICB9CiAgICAKICAgIGNhc2UgY2xhc3MgTm9kZShkYXR1bTogSW50LCBsZWZ0OiBUcmVlLCByaWdodDogVHJlZSkgZXh0ZW5kcyBUcmVlIHsKICAgICAgICBkZWYgaXNFbXB0eSA9IGZhbHNlCiAgICB9CiAgICAKICAgIG9iamVjdCBUcmVlIHsKICAgICAgICBkZWYgYXBwbHkoZGF0YTogSW50KikgPSAoZGF0YSBmb2xkTGVmdCAoRW1wdHk6IFRyZWUpKShfIGluc2VydCBfKQogICAgfQogICAgCiAgICBwcmludGxuKFRyZWUoNSwyLDMpKQogICAgCiAgICBwcmludGxuKFRyZWUoNSwyLDMpIG1lcmdlIFRyZWUoNiwyLDQpKQp9