From 91b5ae633abf3e4c42904e59209af0260ce9ae9a Mon Sep 17 00:00:00 2001 From: Bill Jacobs Date: Fri, 17 Jun 2016 21:50:16 -0700 Subject: [PATCH] Fixed SubArrayMin to check children This fixes SubArrayMin to check the appropriate children of the endpoint nodes, in addition to the children of their ancestors. --- RedBlackNode.jar | Bin 43568 -> 43619 bytes .../btrekkie/red_black_node/RedBlackNode.java | 13 +++++++++---- .../btrekkie/sub_array_min/SubArrayMin.java | 6 ++++++ .../sub_array_min/test/SubArrayMinTest.java | 8 ++++---- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/RedBlackNode.jar b/RedBlackNode.jar index 7e987c9cc03202615763ce0036900ea49b5ad443..f44200aa713b85fed2107694d8d5085cdf12b7d6 100644 GIT binary patch delta 12768 zcmZvC1yJ2w+bzYRxVyVcaVzdlad(Qlb4sy;%fa2gMr8u{5-+%7?zJG2e zGwa!FuRO_4wq%l3I|sQl2Z^jA4+V_{0S^xk(NsMhk8B84UOipsV1@7xHY_0oe)t>c zf0Tp#8ZDR(PaN+P%wR9{xXqxrO^Kbpi*mUP%Rz-2(|#FA&8joUs*S4=idWC z#*Y8gqJRbp2ph&IVg4S{Fh>jcD+6gV$N>}`XFsF)XB0Z8w^K1IJ~%+x+a%yrPMPJ) zp#@^mH)2GO)aeRTm=g|G6Lny`m*KLI@sdrv(Dj`T(4$4ot*qRg`gMA9X1`wDobW(A zm*UH?ek5gdsCcD{l{(aDul`p?2~<9D>F&TDG)EY1~`8@dF76P<)|cT0Yxs z1gjK>&a2o+6$YDI=Lo2U{DUJ3yos2hujkS9Jore`m=t&wE3b;e#j+3M=Jr+KS}!Iz z5>!g;S7E;P`7B478!~+M>4pUzF#v)mQlgb&W+aC*?r)&1zT~78-IsSsHM<7fwP=Z; zyiEP+v7M0Xhl+9139G7Vqa1#)5@bBpS8p~!Zq+_S@wcT|Na@aahSiZAz)4$#`Qa<7 zt3$i)qE&e-j-hYNiE<&27h`YUCQq$6rZYIuluaO;_IvXvEhf8Y2%`L~E+E%8saR56 zu|(2;6tC;2*emBXsjN&-p^&nXF%&)r3&>n4%jqM`6URKowf6j53s;fa!+99x=g*U@D)Mmf@3<7iXpj&P-=HBN z{$Hp4r@xId$pJLxm)|d#8Yai($iyM3K8U5t0tqC;ze%70Lx%>7^RdIszgf$WrG1Og z!|ty-C!F&quacBsS8;ayc;3`>{`^D3zM_>p^}>I$%hd`a`Q51d;^@ZD^jzpS(}nk> zZ@`7ec@{08^PL=mD}M!!US)mmN2`yCyo>7M%kkrIOdr5`u!*W%0Au`SzhxjJCS!47 zBeOI+-dZ>=hv29OjycZN&QGVaool1H_G#*IkS0Ar*bC;V$dcDQN$?D{5spK7l}b8y>f5l zGsUX~zN;9V0PZAFIxGyrVM*pJrhP+VCG7+!sTjapSudV^g0b_{w!ueSLhl(LS%|i) zi3thmgpN7SiSU-@IO9&{EadP9$bEkaJRSJiw@C$zJew=(iI?_*t}N?0ji?v=j_oo$ z*)_JuayBsqLsuSC8)tdFxbojfX1t--t}kBa&7OG6Ys`(o@U-a|Sy^Yq&`lH7#TtA| z)7gM1T1@1|Y2hezI{AXKA5C0!Y#X|Zb+wVW0aI6s;nc&)_uL}Dq^$-VYB{g#g!`C; zWOJ+V9vRu${N#oGgye|?FIh%e3g9bS3{SGLno4}&T-tCe z83*Hshlw@pSw20?tuaVXlA(3AdIP5cD-au7#2eeyb7FH6eee=-+v?zUKoeh6M>pUT zIuqWPC{Xjgxom<*#(Z6&|A(#6eYsi*Op~$xcycC*NYqHR&@R+zm)P9;6aX2+qZLs~%>s7rBt3t+O`-<$vj^>`!H(>*-rI=i!i_(5p`C_KC5Y@+>*%N zMi+H+Re{FRV#6I=J8017#Yo@~7#Ug6t?J66bppx1V&{HxGWR+V2 z613W)JOlkr1=@;e1{U7lQ~I(kS9Ovp@6oEk$in)YgA;}PVRZyN>2U?wz8gdXNv$Eh z8HU_~;?*SkMGcOrM{-dgHv1W6#y(xMZV-pfwUu>6pP@hE9Q!>g^8l{jKhop&cDzQXMFf}O+&7(!N8NRDdZLgyG^^vKod#-uy| zyF&WDR?cS>t)L9fDv)#aH$O5RN3}&RTAAsyzLo)|q zgB)F~vka;-8ydO$U%i4l_w(!#q@-p<6|MNKxhDfUsa4oV?d=^lO&F~kwj(iPD7;t7 zzTd#R=9sh6nvMMq;v%3X|g|Y!u)d*bgW7 zhet*2kwSuwX8;vM)3V&(Av5bo5;#DuPCY0BrG4QrgA&vqbum0Nr)L)CHl{_NN%{uy zq&;RWO^WU1iIvodIEhX;kxs^-VFD7#mCy79?%$PBK4SD~sgIQL^38UGAK)JY{HWP} z#B&27WeV=T4Bs;}C`f5oA;4)JG23$TeRAwh`?+CC`U8Md`a+)xT?e!2qWRk(r;-JG zZvw%DvH9^5YOlLXlW4%>MaDXchv&ldP=Dk%Og_?Q9D4-sT=UEsq+YuITA~Op%vJj@ zHa`(%eT@dw((Q$D`p+iDJ=6|y)479rd=tBRsEc-@gswgcH?enYmW1pwzL@yMu)>er za4L2?>c|6V`?<&cXr_IGhQm^ie7q4wlx=N&ekz!!(7rnU{DzYx9C%oHB7=v-apG-) zBrcrt6e5WdC~-?0U{$mR*^_4dEJ1FgmL6MnH6ht2uY&YTJuyH4%%jd^S*N0%Y30eb zT}Sf|AsFoDwW>h)+^2bEMOZSsJjSHi+%>ii8|6+y`SIkjjyoYe-{{kZ8Inlzt^&rs|+fIE#$$Mr);%Le>LHBebUUGxT zK7>WuHyJ^?Ngolllvz6eEYa)6dh|v8>rj$OsklR@xKg>hzcrWnRD!@%0!x(%i|x)B z=j)w?tsyLZ9Tfdm0>ODb*SZNKR@cY9jIC+F2@-%m$XXqCdJ08C9Az329Px{?HXewv zdcV*&##ExtJjx@oGKCB{Wzpciv~Znlsk=M3dzE$g{Lx)7S#EH8fJolAeQ9iCljMAi zr7R#Zt-DZ5uWWSyXdD9>xBBZ!)VjQMBd~^%_(!P3MGr~E7W#=gQZi@Ip8jeBbt88`D#kVNg5Mq;i_iChtV%IY`PCmN8lQD!q3z18pf9YKwk*g!2 zx5=$5oA*axp%dl&x`djx{EG(&D?nVq9falZIw@qEETTZ>M&)>X2L{mO75Wf8R}_S-s&v{b`EzG$vT%B_l->?_NK)DZo` zR3aP^PJ#SNx*|8pHcR_PG=*KR`-VJYTMkt-y6?`1sDAO(;4sx#=_#NzJ7Me=-V1u< zC2hSFfF>G{`RO$rNjCdb7io9(lWXFV4leLt&HkVHDU>!ZPP_03vG*Nai7Lb$q zcKc5Ew9^9Bk!<1}ibTuD!NkK+NsccuOJHU9q-3FeBLdpmJbV%yzJ$@8jcg1}v5~Ba zLo%Yq|DnX;7i9iGGknRMu(e7B_LK>|NI=@8#1D|+csUdy2M?#3j;a7Q6sd+V5OKhB zTrs;Smc!W5jJn9(I#!K!gp*&UM{M0CZpJaM;;gOvzAF4Ojix_0`#Qg#`t|tqd$H}+ z*InsPssz$SpZmZ?z%XF7vCG~UTlT&vp!JO6`I3{i1kVblN5N9uUbCQstwKwY)Niu{ zVusO z+wRDn>+l)r<>Nx{PeC0!8AA~eM)43WQ`G?Ri5)$ppPqB~P<*NOjf|`8kRk~dhdoq? z@Wlv$d}7;lc}_@tVKBWxW+Axpbe|5fM42$jGZ}h$rL|jC%(pNA@zE6$EDq@24_QNl zXZfV(7_V1kMJND_5HEd+%S5`~hI~9$ps1H5(!fbR)@31@3q*E-mDAb`@>J(cE@I zU_{D=-$UaFA&|QG@Ff&KhWiMm^)~48%q;m&IYle+fPr4sko$>na^^EU0qoU`Uk zLhqRdWnl^=B{CAXF7Nygm8qZZ@VCU+s6`o;F%%}T#!|}wH3EW5I+9bBrdFKe`DvC` zl~k=@x$h2{Jh;;Bx3L_z2mI&>zfq9vfOkdyRE@k0X4v%fHa<@w!@_btO-b$c(ivpl zBs%qTe$HmvQcIyQHPZH9I72Odun#w_#LUQ5v6A;sHE-r|chi^eUy9}ou!p=IRO`yXtphF*3VM#7f zBZ?L3N5ErN>I>MWio&KXP|6Gq>cdZE(KKxa@Pe3nb+qX;<0W}BDtq{NWiumZ`@MPf zGGlN0U|JRQfhT>E+Kem%j{VfF;`$NM+Z=)nEQ6NLFxglYSGaYs0L;Z-)Xr7Q<7M|G zt*L&*_9&W$(jC)ZS*}nRSDFT+9jAGL+efNW6(#CKZP4<>1{t7Zt85C156|)H2`?M9EgVC34D36xm?{ZG$BM**CMuNA zSGvTUEJI#Q8^F?rBURs7{V<1)E9;eL=~)NCbeEl`4QqDva7||~V>Y}imCXPeqF;vS ztn=}dKmx47ue?*`?C3#+Do(@r=HiTiG3s;uw0O@V2s$Cm>AM$R2~fIL zPB6l?->g;U1-+u5W{r#+H0nj<89_U2AQ+;!ord&T@EoF7oP3P~3P=XyHHr)%t9K?1 zA-CKA=tQf;_KmLBzK;(o9{~XhgAi@!$U&Xay=)l{P2tZi(q=&(Ei#$b4joYO@^#|v zY|g^Hj}F2@$(L3mXH1Z`tCCsvZCZj2)5f=-+L`m>;)j9944zwY5KcxEA2B21aq?rE z5LAPVx6g;V(Vop6Jeh9qIM@QD5>Hk3yrdFOR`zU3O}7zFBTEY^)DwCpe5ix1k{x6h zY~$HpA5-ncMrR#l$Zne3w6)^=pgymXn>Kr%&DZR#8yR>W1vVv`PpvE_gjzeQ!h;j@ zs5eVx8(X58rI}{kAJFR*j_@^gSnFqOJZLNu*Po2>;x_R~cQ5Cks_h1Z7g_pXAC4`U zDB1HMDr6x9*Jq6Ytz0Lq9GE0j6^IRtg0WcRS-tTMuMi=(xgZ}-4p}!o*Lh(UZ8J;s zuP%vqiYH$hM4?}7L0k#z^q{g!`UMB|4+0~V=~$ky?6*l}A|`9~{Y2TPMVyNtcqVX- zwoR|Fb$XdwHT|M9`gs6{IGfwtS3(PsRnYhLtzo92Vg0dQVz<9^I2k_px#hiUv z=w&`v{-oEKp(+!@{Ng>dAH$}aq@|%sWV+aPzc|J0esnFHCp6@N2731T1%HI3c#V>}pQH}!yER{x}~A%6xK#^nd4>0y>DYfhv%g+f0Q zyhMZ4M44h>g`$c=_MkSAl1`VA;>LYNai6DH6{vh3t=|S<4IO=D6N?emSjg9n8N~C3 z7#Kz1l~^!o7ewRSlNd_|IR|HcZ_SL5tS8C3Hm-~d`-QdqtzkEhS6OM0+68uDD6Lg= zqIX>5hayP~@-@65*}*ouH&%8+_fMm}X)m1#ux$c|8vfv5J;Hn9cp)=_A1&@LxHcKO zWs1&gUXx)!2!%2W`s<$BOgaj?hDSuHLPE1!TyrJb^C(D0PYDNZSiP_3TB87+5g{C! zP@0mLyK!BK%YwzjMsPmMf@Af_!G?QJ!{bOULP&goUg$IX6N9=>l+TLJ(CDpO!gN9` zePXS=(e&oBRG8da9d#Eky*po>z7kUk=ICCZ3tt`JKjMEvkXi~RNe@5Y2Pl`DrmTZq zHMhQW9Z_M{obwM|*c)fSm8W)O6V0jI-vTP{L?u}bxvo#4N{xsX`R(`u>Z&sz3Iq#N zle*j!zQW!w$QE?Y)n~(J5xQQZ6PEd2v5efnmmOfLu}bB2LI>>@1<#Gb1Ikj&Dmx+F zujLdHwDJt!2xfQZVPQO8c)_AQWZQGXIu#!B?ha+ynn}W*^07?rf4ZK`D6vf&rMi`K zaL5`H4r^puZ|2Pvqn0TyUU-&x#ddCKgEg|?my-g?_T^dK%8ZKh{*c7-HEEVG4h_+P zTsnh`Xs-x=`P;k8BM06=z(<<+yo|*qRLWsviHuhEZFiEcdrIF~FhzEwjBUIm(K-q< z0JY`?3UQa1F5WX=ZbMQIz=M*oyR`>9mhgL9M%FoZ4QRF(q)kCO0zBbI$ks}m>cp&| zx5F)N43(Qn)Z}wspWaW3rD`;46oxtHye{K@DPr@7rT>VdTriqGHu_oft zZ?+PmjAJY&Q%H{MK{UfkHZnN&qmQjC>)Eyn+j0U{t!bYHoU4AenywTr`EdP6&8H96 zVo=Q$sw!{~{84;hd+Y-Ge3hHJ+zxEUEAk1ETt9|NtKG__wrM8pMN8Bo9xVC?+V!Q7*QK~3iReM=4o(wnH} zsq4xUfK`R2yN|6c0~stb@8nkl7@01Rf-hqTHtLs1F2{QPl0>IDpRaI6 zp8r+3E^KA+XA+1D66l-Wf*Rm>@T#HfD0s{kA1Q*@8iS_O3jX#fG%$uQHDZ$9Sx>G= zJd>YQ_wv&@N0FvrU`LM#{t*R!z2lv_i)XXCX({Wk7FNqQHP3+2ten?Up^CkUuWhb6 zfOGw1ft0-oi#Av1aO{1u+tKkybn?Me=;1eQJ97#Cg2tO+GVi$$N+rKEv6dZ0f_i#6 zlmmWDH~Q);t{U4-woDL)(x;_+I2tK(VoyX4Ek7%$Sfi^)X=h=-rP{ETv;3 zRr?5a=|hN*(-#-@%JW-zv)&Hj4=4M7Z-+}?rs$5px@wMO16ium(;{NKqZWK5099IZ zPeb~^m2aiU5i2S!ncLdcPE@VKS1ko#2ZN!ihKM_M^w+8AA?o_4)Gmc&zmL5hcXwW# z7%O8xQlcY8ws|Ic94jY;(7T;6-d4V`bJ$fmD0D9kd2Cv_t?uyIOdg)943CsjI8czg z`k_TYd*%P6xqb_j0V02)bDzOO02IZtw+)Ra&7E4!?sO{c zKljHRsXT0cWbUQ$5$SgPAf*YUtZf7<;bv@%3 zPsT~?7Hb%EM5)Q*;!4eBrTsM~^iny|-`%kh)U7ra)$md2C)OaM(6Aw=-H zUUWkiISB~dF`<##s1r(V&!7`17z3$;E-%^1Ntqn;aCA(7qa#&}{uKc~xyW3*J+9`@ zYRX3<=|-BTBvGU*Dz%5D0MIBgE$2rLD>X9ZPl{Es+NN{I*)RK&S~Ed&;DLfu=IWfu zk7|GH$5gcTuHgPbv*M$3PCFiInf#TNJASrW%8s`?jG?O5HnKZ5UnSRrj6pQ(JlBJ$ z0b}PeKf1!14LAQsTtLD96CB?_D=QDBPpZf(!3ZB_AzQMk2UXj(x90a z*}XdE^e%tWuU0b}x|tK%qdu1RE_#xC)3uN1DX-b9Iwth)c+%Xcnn*z{Kf6}FD_AS^ z*#!|?<1_Ex=#FSLB{e$Z0f5W34@%XtDnd^LzvSJ_ z)2%C?6@1jFI8DEe*rZcGApY<;zsZ2iMXi`J{a&T;NOd+(!n?M*3 zE*9LADZSO&k-0{|1aMy2eaP!m%AhSj@*5U8bmfVOL^VgZ z6Y~@Ir*Ithk9z1*-0isV(kF};0F#O;LH0~y_1t@OcDch7$COZo(7Gc z2(MYpFVCdr4q4b7aDcqR|9lf_%tV<7Scm?-lYg(HzH;Mm{-_xp%f~vw9CJG>t)WMU z4V?FhfLoWqpRuktOLk4@m|0c-#r&h}pu#~S@(k8D(FV_)z(qYc6Kup#NewRK>5(r3 zByAlj?hi*ht;pz46~q-)sFvEYsa!;JbfJdM`X_GS`X0WrNyYYPw=2)@I0J0qw%jR>!cJH6>eW3^mhX+x$YrJjeL3b2P_=RP@-y zRp3?FIVk6FsAFWXyL?NsF{e_y%I*6*uOT>b)7otdaBR%F3S}&`54RbgeFvR>*OsW#4ij^|ng1=hv#3 zzIv0AwrW348SlX!7&kjA8q!-JV_}4BCaw% ztaqwUrCOoft);;5sU8pmrE5SZUcKP(v2i?7d#2{_;IY$CiNGJ>Vv+&Go{{S7(Wj}e z24T|GvnNPaQ2EjO+4erXoX*Qwi}x?!w*asl)bv{;xM+L(I)DRb%DH#XuXnEwuP_#j zwjQI_g|*iXMS1iiR>@SP3uy;%=Q20#-)?u+Q#TYOgUg;^@68L`b0dh`&x0vE>($&nOXtSfECx5p&GlvqE{^YY;DR-W>7=J@BVP7H zwG$6E(Z$2^A=I*$eE)X&Al9E5=eHYBKW%}+8i;7q|;rd=as4uMT=oteKdWn9$qAkC+Ma7J-Vyq)u(w{0(l=;6ii*jrJldj z^D=?@IldoEpNE8vC&53rf`k^ht=Y}tsoq<`J?DyO`wGTRwADTM&gXj`?-OB z7+(W)OZVl?URfFgP|06~5$>U|4pC)mN#m~`sdikudt%4{F2-pVs)UPf8*b=GbAo5U;2-wBV(_4;1MmoG0ivP$ywf@_t7J!VF>(3g&uU9#vIShh3 z8xGr?Wd$?9c+|>$_f@NP*oO*Q+sd5iSnJyk}n5Ku~>Uaa~?J#dbT{hSo2uz z#HkFR!@@OMWZ5<+XYiH&j?3x*?ET)1QS)6w|2)Dgc)8zVzk!R4XW!3o0WCWIY#d9D z1Zu2-^lTpwTJV{2kdu37v{m18t4+WUKjnmla#2U>IE9qY-OEUWSBBuoPXiA)KoZz0 z9i<;Ohw6B0lm!1|YO=CIdC-y_m9rz^LS3+gP8e5`Zb3 z5J>kGDT(e)hJu^{2OAm@NR23p+@G(xMkQaLV0UO4)EIlVG&te*w0m2`ubwq=n|DU$ zCRcJ_#Oi;nNBRVJOL{0?($uuMUPx82fS-xbaggbI-nRL8?s;)NE3z4YnhV!r{z(Q{ z92ugm+2XRN!DNxP()+!-Uv6(M6Yw?tSilu#9Y{S|X0oMl9EubMy{YIf8@>01k}yMV zeQqWhI!uS@dY-ec>}$BG)Je)O{wl(DF1kE+tZb7i)lebpJ{%a1^tH=;NvVe5f((}G zpK!R0N>Ru;?&4wFt*lqG3t1@&F9ejFSjr zuJSablCbS9eAKNAoaj@G=tf2_7+>DR#r@&M=>tvfrZIhnnqu62q5P|C-6qVYprw7|Dg4Eixl2I(YM?j(44z1j+mVve z%VyA1zoG1}kEf4jE@_es)EK}=5U>rG9i59lmC>2B`qY46HT+G8=Md0CH_$KDkk>rb zH_Q1Hf+gi_*aJ<&Cu^WThmLn@C)_0C|9-ddpmlgi|&+pHcqEc;i%zt zKAl(i!GpK_kKD^oWvG#moQNztiU^9DbqSOvzK6?cuOvuj`gYZanwehn+GrFr{g$EI zS5Eo^nZf?n;K4#v_eBc+jKJ4)$W32x_mH; zm&rqVSU7k4bsbS!*0!eNUuJCv5jGbBX?2(~Y|biKZqF-b9a{i&lTecqhN~C^eb`c? zq8W>nISxKSQSyF_@myXMM&jPUDx+z~pWMP3XKkIGX&oUKXA}(yvD~M%C+B_DU#pDL z&VKp&5N|C1BzOTCc=UYUn@88_S@?3=0cBJeIqFum{c8^n{!8x`=`TeI{ENc~VTs1k zD>P{e1-=O{Z1n;_bXf{kAiyF2CNJdVd1+6RNP_XA#Qu8~vYS;6;wqqw_ z&-HIRQkLHg!|=*J0-kmU4^s%oh<2(We1~M=rZ1@1{P9F-2fT)9oguV_r`?If0zG}x zu6_?|MJKHiR;~?TXC!@a@l4W$s)$;s+YV{iyWDh=r?Ol`p;2qawj|gvlf%Rxfmyle z?T9&PsNz`w#Q9+55zU0lbWnmlb108JE5*!E{gt|1VfY1RUQvX9^gsf-s!KN?@r5fr zI=}xJtR%W$Sume=;bflouqDn^ezI;#ckZ8@(6$<*uyfDC>5K9R|*^x@WpQ&|O(7JYvJ z*?D!KbkoM+2-)Z6C71b1_w5_uGyB9Z*O-98he_TrBQLCgosun2s!LoENm?O%kyd+3Zwh1b z!F@yf(`~-V-BVrH9q*2VpC*QT-FFZU?@%o zIYsef@D^C#ORKN{YznFPNh2k0y}nfBVv(m}tAb_vfQ+$dn9p2Nc7-crb8MWu2wC;i zPR|BarBXDNC(BR;sD7@gWezb&r&<&Zqj|?cSQPEXQKfWGTuAf@*M*uHw&Gn|CpMHr zVVN}dNmy}-?Ue90qgtEDsduAn^W zhp0~r>|`295r)>L@V-##oL`=}tsO83q@04GMfwn;w&~~rV~B&+vX$%MJB_`9q9!kN z!y?0#cw)9*^o3;PC>)%af+gxAAO0CFyi&AAXiyLk)PF|Ie>t2R$n1pvb=?~~;{R*5 z_j4q*H^GMb9vi>Em*f6*k@ z=Pz#Ldi_P6JlDTCnHTsM)$`5%Vq3n|U!*KB`imh2)_?J`zySV_^;+g1Q#R;Jp#kzg zh5!5J2kI`=B>RVf`VdoS_s6ph{ij935dXQEtAO%~7(hlv6r}$M?}XsWi2exi{|G<- zrw&38lv||yH(6t}em3F%S2OVCPci|JTruX~i!&}JgjCl4L-B)JiZT9DV}Gb|L(rBX zA4t9w>2JFKoSQiR>y+K5e}t?c{}PP9!vB0Mg8wBPv;HHb0X5*RR910 delta 12805 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

jJyB&3aU|E{ZH8 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 HiSvH|-Lzk! diff --git a/src/com/github/btrekkie/red_black_node/RedBlackNode.java b/src/com/github/btrekkie/red_black_node/RedBlackNode.java index 70bcb229a..91685acba 100644 --- a/src/com/github/btrekkie/red_black_node/RedBlackNode.java +++ b/src/com/github/btrekkie/red_black_node/RedBlackNode.java @@ -360,7 +360,7 @@ public abstract class RedBlackNode> implements Compara * @param allowDuplicates Whether to insert newNode if there is an equal node in the tree. To check whether we * inserted newNode, check whether newNode.parent is null and the return value differs from newNode. * @param comparator A comparator indicating where to put the node. If this is null, we use the nodes' natural - * order, as in N.compare. + * order, as in N.compareTo. * @return The root of the resulting tree. */ public N insert(N newNode, boolean allowDuplicates, Comparator comparator) { @@ -829,10 +829,14 @@ public abstract class RedBlackNode> implements Compara * inserting all of the nodes in "last". */ public N concatenate(N last) { + if (parent != null) { + throw new IllegalArgumentException("The node is not the root of a tree"); + } + if (last.parent != null) { + throw new IllegalArgumentException("The node is not the root of a tree"); + } if (isLeaf()) { return last; - } else if (parent != null) { - throw new IllegalArgumentException("This is not the root of a tree"); } else if (last.isLeaf()) { @SuppressWarnings("unchecked") N nThis = (N)this; @@ -1112,6 +1116,7 @@ public abstract class RedBlackNode> implements Compara * The base class's implementation takes O(log N) time. If a RedBlackNode subclass stores a value used to order the * nodes, then it could override compareTo to compare the nodes' values, which would take O(1) time. */ + @Override public int compareTo(N other) { if (isLeaf() || other.isLeaf()) { throw new IllegalArgumentException("One of the nodes is a leaf node"); @@ -1325,7 +1330,7 @@ public abstract class RedBlackNode> implements Compara * useful for debugging. RedBlackNode subclasses may want to override assertSubtreeIsValid() to call * assertOrderIsValid. * @param comparator A comparator indicating how the nodes should be ordered. If this is null, we use the nodes' - * natural order, as in N.compare. + * natural order, as in N.compareTo. */ public void assertOrderIsValid(Comparator comparator) { if (comparator == null) { diff --git a/src/com/github/btrekkie/sub_array_min/SubArrayMin.java b/src/com/github/btrekkie/sub_array_min/SubArrayMin.java index 874db6575..63634c9f8 100644 --- a/src/com/github/btrekkie/sub_array_min/SubArrayMin.java +++ b/src/com/github/btrekkie/sub_array_min/SubArrayMin.java @@ -57,6 +57,9 @@ public class SubArrayMin { int min = Math.min(lca.value, Math.min(start.value, end.value)); if (start != lca) { + if (start.right.min < min) { + min = start.right.min; + } for (SubArrayMinNode node = start; node.parent != lca; node = node.parent) { if (node.parent.left == node) { if (node.parent.value < min) { @@ -69,6 +72,9 @@ public class SubArrayMin { } } if (end != lca) { + if (end.left.min < min) { + min = end.left.min; + } for (SubArrayMinNode node = end; node.parent != lca; node = node.parent) { if (node.parent.right == node) { if (node.parent.value < min) { diff --git a/src/com/github/btrekkie/sub_array_min/test/SubArrayMinTest.java b/src/com/github/btrekkie/sub_array_min/test/SubArrayMinTest.java index d69657f7a..a29719ddc 100644 --- a/src/com/github/btrekkie/sub_array_min/test/SubArrayMinTest.java +++ b/src/com/github/btrekkie/sub_array_min/test/SubArrayMinTest.java @@ -13,16 +13,16 @@ public class SubArrayMinTest { SubArrayMin sam = new SubArrayMin(); sam.add(12); sam.add(42); - sam.add(16); sam.add(-3); - sam.add(8); + sam.add(16); sam.add(5); + sam.add(8); sam.add(4); assertEquals(-3, sam.min(0, 7)); - assertEquals(12, sam.min(0, 3)); + assertEquals(12, sam.min(0, 2)); assertEquals(-3, sam.min(2, 4)); assertEquals(12, sam.min(0, 1)); - assertEquals(5, sam.min(4, 6)); + assertEquals(5, sam.min(3, 6)); assertEquals(4, sam.min(4, 7)); sam = new SubArrayMin();