Paste: balance-shuffle
Author: | kobi |
Mode: | factor |
Date: | Fri, 22 Oct 2010 11:51:05 |
Plain Text |
USING: arrays binary-tree kernel make math sequences ;
IN: binary-tree.balance
: floored-middle
length 1 - 2 /i ;
: take-middles
[ dup floored-middle swap nth , ] each ;
: (>sides)
dup floored-middle [ head ] [ 1 + tail ] 2bi ;
: >sides
[ take-middles ]
[ [ (>sides) 2array harvest ] map concat ] bi ;
: half-shuffle
[ >array 1array [ dup empty? ] [ >sides ] until drop ] { } make ;
: re-balance
values half-shuffle unclip <node> <binary-tree> swap add-values ;
New Annotation