trees.splay: fix delete-at.
parent
7d31da68b8
commit
ce1d69aa0a
|
@ -31,3 +31,8 @@ IN: trees.splay.tests
|
|||
{ 1 "a" } { 2 "b" } { 3 "c" }
|
||||
} >splay >alist
|
||||
] unit-test
|
||||
|
||||
[ 0 ] [
|
||||
100 iota [ dup zip >splay ] keep
|
||||
[ over delete-at ] each assoc-size
|
||||
] unit-test
|
||||
|
|
|
@ -16,7 +16,7 @@ TUPLE: splay < tree ;
|
|||
dup left>>
|
||||
[ right>> swap left<< ] 2keep
|
||||
[ right<< ] keep ;
|
||||
|
||||
|
||||
: rotate-left ( node -- node )
|
||||
dup right>>
|
||||
[ left>> swap right<< ] 2keep
|
||||
|
@ -94,18 +94,13 @@ DEFER: (splay)
|
|||
dup [ dup get-largest key>> swap splay-at ] when ;
|
||||
|
||||
: splay-join ( n2 n1 -- node )
|
||||
splay-largest [
|
||||
[ right<< ] keep
|
||||
] [
|
||||
drop f
|
||||
] if* ;
|
||||
splay-largest [ [ right<< ] keep ] when* ;
|
||||
|
||||
: remove-splay ( key tree -- )
|
||||
[ get-splay nip ] keep [
|
||||
dup dec-count
|
||||
2dup get-splay [
|
||||
dup right>> swap left>> splay-join
|
||||
swap root<<
|
||||
] [ drop ] if* ;
|
||||
>>root dec-count drop
|
||||
] [ 3drop ] if ;
|
||||
|
||||
: set-splay ( value key tree -- )
|
||||
2dup get-splay [ 2nip value<< ] [
|
||||
|
|
Loading…
Reference in New Issue