From d7516da1a78a23716a4d07c4bffad137c0ffc0f0 Mon Sep 17 00:00:00 2001 From: mgisr Date: Sat, 3 Dec 2022 17:19:38 +0800 Subject: [PATCH] feat(docs/chapter_tree/avl_tree.md): create 'avl_tree.md' --- .../avl_tree.assets/avl_tree1.png | Bin 0 -> 7526 bytes .../avl_tree.assets/avl_tree2.png | Bin 0 -> 10995 bytes .../avl_tree.assets/binary_search_tree1.png | Bin 0 -> 6621 bytes .../avl_tree.assets/binary_search_tree2.png | Bin 0 -> 4643 bytes .../avl_tree.assets/rotate_left1.png | Bin 0 -> 11175 bytes .../avl_tree.assets/rotate_left2.png | Bin 0 -> 7692 bytes .../avl_tree.assets/rotate_left3.png | Bin 0 -> 8093 bytes .../avl_tree.assets/rotate_left_right1.png | Bin 0 -> 9893 bytes .../avl_tree.assets/rotate_left_right2.png | Bin 0 -> 8233 bytes .../avl_tree.assets/rotate_left_right3.png | Bin 0 -> 11039 bytes .../avl_tree.assets/rotate_left_right4.png | Bin 0 -> 9230 bytes .../avl_tree.assets/rotate_right1.png | Bin 0 -> 7734 bytes .../avl_tree.assets/rotate_right2.png | Bin 0 -> 8142 bytes docs/chapter_tree/avl_tree.md | 309 ++++++++++++++++++ 14 files changed, 309 insertions(+) create mode 100644 docs/chapter_tree/avl_tree.assets/avl_tree1.png create mode 100644 docs/chapter_tree/avl_tree.assets/avl_tree2.png create mode 100644 docs/chapter_tree/avl_tree.assets/binary_search_tree1.png create mode 100644 docs/chapter_tree/avl_tree.assets/binary_search_tree2.png create mode 100644 docs/chapter_tree/avl_tree.assets/rotate_left1.png create mode 100644 docs/chapter_tree/avl_tree.assets/rotate_left2.png create mode 100644 docs/chapter_tree/avl_tree.assets/rotate_left3.png create mode 100644 docs/chapter_tree/avl_tree.assets/rotate_left_right1.png create mode 100644 docs/chapter_tree/avl_tree.assets/rotate_left_right2.png create mode 100644 docs/chapter_tree/avl_tree.assets/rotate_left_right3.png create mode 100644 docs/chapter_tree/avl_tree.assets/rotate_left_right4.png create mode 100644 docs/chapter_tree/avl_tree.assets/rotate_right1.png create mode 100644 docs/chapter_tree/avl_tree.assets/rotate_right2.png create mode 100644 docs/chapter_tree/avl_tree.md diff --git a/docs/chapter_tree/avl_tree.assets/avl_tree1.png b/docs/chapter_tree/avl_tree.assets/avl_tree1.png new file mode 100644 index 0000000000000000000000000000000000000000..ef4417793773bbb04e2c233fd0018fd7e52e9d0f GIT binary patch literal 7526 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 literal 0 HcmV?d00001 diff --git a/docs/chapter_tree/avl_tree.assets/avl_tree2.png b/docs/chapter_tree/avl_tree.assets/avl_tree2.png new file mode 100644 index 0000000000000000000000000000000000000000..456d19f201080a90a7d113d62e7af44349db8cc7 GIT binary patch literal 10995 zcmaiabzGEN*Y-WbNGT;LB?1!CEir_^(A_D>0Md#ul;|J=(nv^2$4GaFgh3-9F*G7l z0|>&PAo|^$bDr~@=Xu}v_x&|6v+sNFz4qE`UDvf%q`s~i87U(v003kf>MDld=P3X{ zIEV?szYg#E>4P7T2Zn05fXWf(O#om6G*py~{cU%GgWQv+8}>#~uHP=acMuPavvkFH zz`l?cv1-2S?(v++YliQ1_?o05!oQZ5B%mEwB~65?X1!EZp zBJv1=^z?KFR#wDK=66}Le)mrC9x!Og*kG#A((&n8i(u-ut1yEcWSI=xG26_ZwD9ho zPEVdR;7$$8D{gM~FDxw`FtD|aOBZv#!8#C1MDYQOjcjaeyyxfV7tRx<1H=Kud~{Ap zgxaV~hH=8)ne3F5hS#;V-sO#rccPBNKX=tdWVZu&^IGIy&S{a~?Co1R;Q{t7}h3N5@&7{#`P(AKCWMlPBpoI&n?X z65|WYDq30>B|Ycw&Q@DlS=G2qaBX?P(UKD~y7$zy@h~Q~u(qnv!NIxNv9af?`~KPy z-FwFc`T3uIb#-+a09BcliclG3EjMszyk|)HwBW*p3vPlot;w=Mc-+(O`^URB$tfvh z_@kpNI@SAbJv1UE4qR;-iVvjXsb2ZDElkSi2$>D@wk_TqFA3Jr=(l5|yxVw6I*ObQ z!dJI%Qob4(9F%?d?aMH817G0n+gELak4z5n__*VV4SDf)l97=Kxk~#g`0X-}yp$$5shZeiHv2N$;5O6bwM6|GW2z-nwAALe z7nG;JG3e@O-olc!FfdgU?>X0DySK<^R+$j-veL2kDj>kZZ__G1KRG#Rr}mzStL;U4 zx5paWa^Jwf$;Qdi_LD_&F=~bFH6H3Ja_L2W+jjF9751ElOgDifc=pkcr3QBWCe+R> z3%6c&;j~*TjR8%K$DAay!XxITpI@YWe>{yhabIZlrO?Zg@g-Kw5+t=!Ax>Ig53ep` ze8Tn+cYIoRbm$xZHVTjXOy;-JbAg72W&_IcV?0PM`QiB?z#Zbu(wf=r zBT1$jv-nT6Hfx*MvMIi1b0+nmV^>*tykqTLvZE=(i@~+P)0rBFB0ke{VQrRzzDK`) z27ossY_a$8r0|*!-4Igh%2%4LIQ#}hczC#Rhg!}h?$$d6Y_w`|%pq*Vt0plw3prXo zTcl=X>HOA;-}Io`5AV;ug%b;SwS@PVTMrBj^gh~>+JZMZypOw&VZ3ojpm>U(Y4hti z;k$8z@$mHQIg@4t$EwHcz7HM-tLrhF=+AMXYZ)nBP9&gN{Ktt z*-w>QT=ntwg;zCk#HK4>Ct|9aK3(YuI_|V{dW|@GiXvM9dbSYZS`Zq@fBk zK7FUBYI+cgxqO-|u_do%;h10c`0%2lo4X7?R`0FLpo3{Bddtj9^NBj*cE=cnB0m;$ z64XMlV&>)j{8L~I05t4jxvjb}P@h(H3C+*i$)kJN08%mN0Hr>23D*gUUd@Vw*;apR zmg^{Mg_Z)0CQt^YAY>LCXUsv*Tlt|V zAA0Ls8``kZ@gvi#Q@TXbc{Dq?$4Yk-F6(@M@_iqF7}Ya&Ha>+m*4;`?-A~dAvU>W6 zE(X}v`e@GUqj#}P(qhhr>iGWX%eA`6xkwXky_Qtlz|CK`f1gYjpd#62X^Veu4X2R| z8)6W-#9fmC-@d3mlwW!<@%EKbs~Scyr9H5Kwxh7{^Xluf9WM(&6LL6%y{C~v$3%pLcU6DOc2q&WN&vs@TSd8i`;by3cXtVs`JX)d zMFbFCmn#Kc=F+<{NqLHsvCH^khN^%mg1bpFizLfA*L&hKien;KM6fzA*|%-2z_K8E znEIaihL4OMJssT_DG3Sbm>4lVaxn=BiIv60#b5e7^@Lq*)IL8hps|2$LqSCv4pm=z z^v(y?^$qA$h;^N-tF6VGnVQB;PEE;|Im`PU_- zw4gwEFp6LsR^C^va#Ry2h8+elM;a|CasFr8th{lNKdaUch03p}5SU+B$hsDFhx$T2 zgfgyxfMse7RY1^{_q|sun^7D8xyD4)^(3QS0TU`D12Zx-ZL_XC>b9%?xVnEy(5jLD z{SFE%D0`lCMseWLg;qq!==6B^;T=afvQK)E+$Qx z;$G#*ul4Z?Wz`jqWnx$Xw~Ruwp^NDG1>3xv&lwTQR9@=u1_e{gkVxd`3kEbgf|GjlB1i%znEZ%Q#n^NfmZPiuk>PV)L>eVY1B}v zDMIGpm+$3x91&nyDA0F1$)9<(R1BN6@MLO2L5=-H0~nq%(yKvC0#h1KUsp9ZgfW7# z9C<18)qyOq2l-y2^G><<`&Gae_B9L1N}U8xuW*JhJSIWw)|px9NenZNUAwx#_0znr z5JqBG%T4UhgtDSQlQ(qQ_tvOJ96m1WeK(zSKSmpmtj{>|Sp@8&>#ME{Nw?7*R2Im7 zcL3tJ=h)J5{Z1m=o2NFLteLyxK^2(nT}E2XrhRW|N=-U>0@Lq`%D)etbs$ahu7ct(ac4l(-}T_xp?d~)c>lYPLFuPm`IWhp}O^&2vj_sx0--OJ2Ga_0S4Rr z`2_0oAwKW=#iWHqrmj03mpMgRyME z|0Y>}4Se?^+4^1LnT|89d3to18^M~K6KTpLxJ8*Olura~QC5(wopdaW`@;Eoc@po0zXjcU^MMhH{#Ns$%|M;NvI_-TN-!BgsU>mERKVX(BLQeNB242g?QMUqk31_kdAeti`4?C28gt4UpW zFH-8FiyQu%dejxQnkin=!8dw3ZmwDFma0wahtKZT&`fxSTlCtWui@w<&;S1G3kiHW zGPAOhK<;F=X@KAfyJDGi#it<12Mdx5UzlNEZ%c5EB~)BbvXL}yENj*p(9lg1v}A>T zkNM1aDliv&^FG1J67T~0{V}jHrd_XJZ+Q|DTU;$^tjyJx_tny}`6>{W5=AE?JdpgU z-==2Efn1A2ror2X{1y_^?At3sl>hOQ4Em1PJ23wfIBp+37u0FJ#9QW~ez0CVVb2by zcc9F*q8JcV-mTXKk{eJeC(l_ViU;+IM6t1mnT&(if;JEX^OD=@D@ElcCBY5(_e?X3 zs!e?ifA1kEQu;l`dm@u^Ug0p2Of?Nby3O!3+*CH3YrPiI_JPF7Y)7mkt{d6(-ngJ+ zNm7Z@H7Yt}=1%!orn&p78})xEI-AYT|)} zfC~jz(81{7j)jHADIXu-dsjEN9Ghyp5KoR)-)%ZZCZ?;6O-&e8b}G`$hvrf%cv_@I zkT5pMZ(P7fCJS@%;>B;785zu;O>@=HVNl4&j~}0coa0nE?*k(~Gl#}?a4xjplR@oYd5&hJpf)_pAG9l^sia zYO1Pl&q6{VQFSkpOQL-V1zf=GPGb)cQPi-NyGlyk8Ct1=Ya`h@d#0C-b{9LMYinz} zJ3Bik@_7u|29o*voz6F?JrUS6XS4I|hxg>m+HJVDOoI?F@0Ck1=rC_<4|f)5)4;ke zh5(a*fPe_E#rE_9lZO*_(<-hz{g252E9&Z@rpFZr|@8^tSZ}i|e zcE8Idx3dx*6{Y^s%OYTcBko;Lo2Z7hM@qPZC4 zO9ACIwq+zFg+?dmxRahVtkWIJNwRZ`BIphI@_fq!|DA^4mzK+ju$Vf~q^v^3-WtF(V z*VvemZr&Jro|1AjcChp{kjP{^+ZVvjMSUF0x+fTGkeF*+nd|0J5RYR)YKw8 z%L0uB|0XSUJmsa6;}fjZP5Ob^Id91C<%36CI_!0~cha`13Hz+0)j%bu+OO(GkJS~@ z#K<1shWBp>j0*a6zk_V%KIqswFGalDyj!fjuF9gyecndVdS~{PI*X5KM1ETzbr^gh zU>4e)>$3mBk<3>4I(&!9W^(D_w_yzl*SmN9KTWBG&aUb>?0^m$Rs3tmCH|M)-Mi|O zL5C$DMM5_|N(D?gIvW+Q@AHe%R7hf@ui>9vc-xl(p8{>Ot@G9kBwi2Ta5&AVP3o-( z#Rzhi@!)v*6mL~k)zC+;A74i=ZHuDckd7^|Qb#y&VoR!CfqRS0QcpUvef?m4WPymB zIhVLPL#uuCU7ho2+)~rF1xODi0>3VIpGoegPfxNYt+_u^n1jS-Bp2uTaG8)#nc@M}Z3M zetV1bLt7KC9^sG_Tx|w*Dn;{G#GD?^FD>O%;C(X(JbgV7RaFPyzD2OY1CtMrcTlyU z8%?`Z+L(h#hdZCg3F&0WRs5MB#6O2VD5Q_iVftt0Zj9wz|G6=S-__LAh-|wQ=@-=3 z@0U16{BUFnn(1aB#pE@V&AD7(Nm*cgAaGLj7TFXIXLYm3z}fe(6(TM9&OF*Ex0%%% zI+V=W+JwKGcICznNO~FZ{^en;$F0=8`p>`mi)`FkGJB7xHz1%`s#A!ZMdF{4si`(_ zzk`YQfU`@~VP_;W)w+LyW*#?9BoZAq4K>iLsv{h)*Ltr z7|0SM4}2RU3~RR?!Q+Y)Lui<3I%JQnFMb)$G%z!xKYv7#PP37q#^Do#Pfor_7W`v^ z&2VRy!v|h_>pR;wqMUA|;`X0auIWE37_^MWG22Miz)Z*6@^7yFn^EP6@A%;Ly%jMS z_;)c|lCz;IK3M{dc6gh0z8ZJxILMBk26%gGJ5yXY^9q~=^MZT`?a?dFrWs>Qqb4{L z{A|tID=E_l+#73xp_^vC2G*YIo9)Lz(8{VGwbUK47RubR=0=R6x|&iAtdb+!FI zTp6{IykVjT-d*aR+i$Z528b#nf{GH8zWe{^qKy{~VB{|8I7Ho*AA>na-_3`Ch8 z{yW)t>M(Og?pXXo-O9WKo;EkCvv23@8}N(R?kZa7%i5a9&c;UHzQ3IJ+_q`_->fXI zcq2-lYVZVE16~s;Mh32DiK>)izk%i4k6N^7Y5@TOnw*8|IBwEnBfo)7a=Smox5h_m z8us84kGRJ#0Dchn?A)zen2CVa>T2QFB_;j#$d>`$X(c5kB*%C>KH^rM1hCj3?_TV7 zH{d+b+yEYuDRRbTkRJ?E{)cM$ztS(@WQ@d${>Gq-lLk1mfRx@l+CZJz9O|*(mHKZd z1ykLEg&Fvd{N+Ny_&RvMZDA7(XDr7byl*n+!f0r0Z!(jwj%3L;2cJqpL%KHB22=M= z&wg2_4yyi`)C2sL?U$_2TwweT=cXve(0645e~_(@1<#~7R~=IaO+-aS51#NujjXKL z+xz&4bHL%joMK`|G_Y&Q&!6u<5@tAr_!D(mN%ogjLS&RPxaL8JQ^u8AZam!loE6vp zxWbZD3JK#A$g4awffULzkns@-zkchEng|ihRK33YqK{ZR7F^9dcI+=MlqoB}JKRGoj2#vu?_dpr zbR7?ECkEYt$*Y2U8*zUH`C97pmMdf8`f(4jTqOAD_bUb@%Lyun$FX~HL3S`MHEN9EdRgIi&&J|gpkM_m05v<`y z`+UYh`51U|UxmC4Z~x)MQ~rDQtNqv7KNtR82SUCx}-GhV#({Q?Y-Rq#0Y z-p^2=do)!C34nA%xfZ^0r7Z7~`6pDu3=pn1QS=1l5Yo{H(OiR8MILZc4Q5?<`#8a-}4dimtt zEvech{(lq$N(K7Ju0Ya>XHsx~WAccXTbHk&5M6zU{_@4i*v!mfvecxt9A{AULePeB zcWWzunI1&uvxf8f^)x|)Wp{KX;B=QP{cJmsoE-hV8^iK@m5lZ2M9YAT=r}Q!kR<}7Wt*ZsH$nPHiFZ0 z@8ekbY-;X=?Q%(E;6R!4{R;uBO2W|Ys;x@7i%1wS6N#%=dn_z2UbqDhY{%M(WBcm_ zWiv(L@!VmBcN@R}XhT&^jeWhd?>};Mc&IPuw-7ysu|!ciTsg{Pz|+gwhtIj-4OF z+?DZvL)!P-jVkF`w!LfX>lE<7!)JSQ)Q&KwV>hN+3KHSR;jAVus_5XzxVgRIi;YD*VFH@H*2r-7aj>Q%cVW&)WF!BnkbuA>&D(JJ zMp_ku-HyAq3?G{lSMKfbVayCt@$;}?*+<3%8xy>0()}(L`Nx1qN0PJ#DQ|M4Pevv% zKao~wfBdqU*FNQ^$J0^htUhv3%6CyM7G21;8c}AD_AVA>cDa>6f&ybyYEO#JQIsk5mgo0c=qN`QGcP3 z=z)RuTH>Ghvm~u$UPT1-Q(4u!CYNodNRjIswNdK=Qu-mFlUMS1KFmK?^G${D!O& zOhE+8kA|xQpiLVSEoxb1COfv8WWVU3@*V$fVLoGyNp;5!F! z5OH?L)^>3!E-sEa{(S+7xJ0Z=yzQS+bD5`V!|Y<=Wb710N-wrgfcn2$==2=eux^8HuK|DSv>GaIKW0*#`q=EKGV z{;XZc7$t}QNFzr>>$;u0v9Ylfb8~YO?9cl=fe2cQFg`ITA)B3A?H-^HS#|?_pGJUv z0i=27y#Va@g&zPjT*S9@?%&^6H!(>mXm7VRp);3p+{58iz#4ONTbryh&08+uuz*^! z%acEmN$&rP+gxKT1H;aVov``VzCU5AfYpmtRNKV*NY=$Dq4j$=6-jt_ zo-6-f<@e}=vK-)Rcu!}G42RuKD2l!956lR;r$gXPvmcIZ$9cDCA`l2$O4TuGIXV8A zxHzXm3??4w&LOimcFn z1U|Je>G-NTh4tsyL^ly=43HR!`wJZ2nFIevi^9Nf4z16%@`3Qa2JksFr8-@06G1ak zSG(GVoB{(R^IF0sBxc${2>6~oT)n;`3@v82^R1l*{7qW#Q0u6M%R0c^!_g`Iwtpf* zk8oLv2r6L~NLgZ5b{a}U<+ZEKjrnUFcFM4Fb$q}$EmN3f@y&B^i%=wjl_T)(ksHoM z3A!?uo~sIjOQNk>d_=G;1U%~bVh>}01XERy4?JQ9)|~VIddL}8ehWWc)O+&}Olb$Z zq}b(NyAJsd>rxYO_#pzc>S4^>e+%2ifZkyTySyxT`T$T!l%MVgmLQ6i)ha$CFM5m; zse~yZb!Pbg2?H4*1XRMAxcI`f`!sIBlE6U_=Ff?{>|jHjvTvhL1<=;K0uun55U8J> zxG@?A&T>hmOS^UtTCHY@El>_5UKUGq!!=!E=8krP8L~pe`ge&G?Thl)AZTsg?0MSF zT){Q69zgg!kJ4fP7Z4bO?j}xC#aC%@@6woV(Hr{nhDN;m1fC8X9R%J#g4GM~6oJwq z6e(&S*gm+(lxE@p%O`$yy^Wyje`vi)i#0ra|BKXnO6B5JrOhyX?oYf_`pWqKDfNC` zZ1uhPpV!xydgKX12#uN|3HHCcMHqZS6oG#f_`=V=kcDPkz)(WH`)&UhmG_G|MXo>? zu1DDs=A))aj@|xtaL|bI@%ij8$GSlKjQhjiy&}NE;6$6BU<|;K3k`AU7bNZ(d-CLo zM5>_8Ko&f6v4XRBz9Wd<(a|w9I5-%iYEY<{{D*g4gHAl}SlmIGfhw!D1O`WX^vo(t zcSq~5NL=;x{>mrPm@Xq?ZB=|Jh(3FzycUNH+VZ3GpLxtRu6(~wDnR5uQw{mE6QOii z@n0e@*eznx+ecwCgTazh5T3l#8~al%eR5y>^yEa}#wPa5moM)hW9Z!f0S{dr@5v(A zCMna@@jJFvetRi=W_`-KzS3Z$Nu_Pa$s6Y&A73zwzXe-WOa|j5ty_Iun#;YP`trLsfAJl@x9t~)ouEEnIYU$F(97lzqo|5jYJAXfX7S0FmXD*c`3 zT_SD^Woi;4(YTK}^?%5$F3?aWF(?XQ_Ywy-KJ9?L8!46MHMdf0GVUwVn;ic9@olEo zad6U3_`8Wsvh%eVvWASKha|p)o!g3 zZxbj3kS4PQC}K+lM2ad<>Tab!L^SKb_y& z!r^}jqYX0S4CU+fpZfm|Avp~xb~CA}MWHTYPD9_DU%ytc+S!)myA=0N2w7oAIn|v= zTv+tq5K>#uS?zBK8H3&@{s37x?*`e2Uzu07oNXRNzZAA2bn5}*gd2MoUz@~EkEIB- zm7^;NwQ$WbBnB-(wG3*XvtbQ)&Tm|55Xw7VfR{I9biFt6y4Jgtn04cV^;1-*^K`In zwIUOHE;iJ&_MQ<41vhCsK!E6eQ!GHel_R%b>d}qb8v(@1zMC5S9mx-5vPud2I`>QM zRuR16=wdT3BPx@A>S=u*an_``Tjr`wfTnv_)nan)TVEs4Bfv(Fi-t;eH^^*7QkbQ~ zSB`Ps`k!QCx-hyt=g?4L#jL{e=wnoQ@?Y4{M1%9DA(@`Tc}6P*Vd?tupX%hXF|)q} z(yY#Fox$fIW~hMya!b+I$AT{*t6=be(+T#OBUi@rrw`K1TM?{$Nk3n2-am*PlDHBQ z$tQbefkLEh;&Gali}`;wc*uoZfjAQ19XOJlFG>Sjt3qHyV{hjU%Du| z=}r09t1W|w6|=z65ew^pPomH*$`8poHWYql*H3*%Mk`19=A)?6Tpi=tjrLG&Wx?{d zcZbqx5`z!&pO#Z!=dqaVH>xZwL<&<9i$9>T$Zn58d&7!jaqRz$Xdn>G>I8w{M&v`> zzOli3DyopUY8*}rtrH>y!3yY4(Ne}(AXb0@gQUz^X;(-tp-J8$tRtGX=1ja)N4^{7MLo z5|}I1^77^OssMlNns-V}OiVjlRQ>~he{%*FmSJ^0y{r90Lo^qZh#is0_N$i&gMmfJ nSGsi*z313>z1lp`-&bqwTKF8fpXz~V70^)CRjIsX_vHTpn>`tl literal 0 HcmV?d00001 diff --git a/docs/chapter_tree/avl_tree.assets/binary_search_tree1.png b/docs/chapter_tree/avl_tree.assets/binary_search_tree1.png new file mode 100644 index 0000000000000000000000000000000000000000..aae64da472c7500cbf7bcd94539ab23dba0bd437 GIT binary patch literal 6621 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 literal 0 HcmV?d00001 diff --git a/docs/chapter_tree/avl_tree.assets/rotate_left1.png b/docs/chapter_tree/avl_tree.assets/rotate_left1.png new file mode 100644 index 0000000000000000000000000000000000000000..eeaf90fc1163941778e9ee6d88ca2ba0f27334f6 GIT binary patch literal 11175 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 literal 0 HcmV?d00001 diff --git a/docs/chapter_tree/avl_tree.assets/rotate_left_right2.png b/docs/chapter_tree/avl_tree.assets/rotate_left_right2.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d71b159ceec8e5c77a6851858d3b4cb3d58930 GIT binary patch literal 8233 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

x3 zscIcQc8FP2ijTq5<8WuI(e-C{BcqL)tKCfNn%2LD6U!zEjK(`Gjb_}J(ylXPw=TZ( zQponZT_pGKlz_THMFAe9I6iAyL$5OzM&>fxLJQ`uviOb5bZQ*Y4er+^q;*rLc$AQ? z*2Vbc4*B0EgD?zc`s*IczP=>jHPY*h(Gmf9wk3Q0o6{)EykgDp5vA=*Rcv;aQ2V>I z3R44O98Gq~nHRj@58f_On4z-GA~LJHewe!WzP;U`7lp7w5y`ny8L$%xB*vRyObt&qA%%Z6#D^&^{AXznu-nwr+9(0Dl)%wsYi0(DOwX?(HYHvc zyb`^+NEz3yD|q+rem+;^HW=7G_VyOz6%umil9V)|fU+heCm)!LF%SXXgh={K12eph z=@AcT<~?lV5K0o%@5ekwKH@5~Tp@jqgLY@n&wp4Y{>x4l*7sb-qgr`bbB-a zdrcGci1V}(vh)xmE+Pm+;;To?@g#mCLb3sKPhdhg(a0tILLT&Q8GfcHF@=Fz89|x~ z4SIC*^sos2tVwO>F(KFpAqdrp!Q4^f+>uRS`p8AkKK=ws11Tg!x3Q3(Qv(4VAFROd zFYv)%)*Ck{fz#0&@s8kg0PAZWYZu(-%!n6p13m%#I7A98lwUO~yUn4yxZ#icJ03%C zDIvG5D43Or8tn5_J2a0V^#d)S# zVe@iO%zf-XAQGaC1fUpY>|YRhorW#S5*(7G`KNOt2K4kR zx-Na>2PgI!e9`~F>2k9w<~}k?v7qA2G(S<%&X78y%eaq53bDp z;AYGn$eH4aDJQNUG0@mfHYjdFprxveRD_n9qvxPia+4{6ETI-0tF)1@?od)osJbH3 zp+@%2lP>MD16ttgPSzjb`WyAC5-=2Zwhw`yg>~xwz{X!1H24;NQV1`ql^p48Z<7+f zkB?lvIX(BCl7@#anp@A^Rt9+q1;$_ZJuIX|bLK%Ye; zNUc{}RzyVjOS|yD;@hz|6Cy?ANgN`hqQXl`N=%oRms2H@XRF`w5;Myvs;J-@o0t@s znVA{oa}CX$lG?jeYSMr}N)z-F-;VY4U+KB;8KV9C-Yzpuq5qB&!>-xNN6V$da>Fpc zW}FY#+uPfXVq#)$SB^WZ*&Ai%UNkCx-Fzry(u*Uqwbn;`#ggd)(35nf+r~ zu0lC(Hvc0Acj>zB+mMjywlgc81l~We1SFeEDIQ1L?J;USC&jtd{Lz@3QJU+A81ygan`Fn4EAj3M$}D{(uQ*RV+veItr*1hrJ)2gWtbv5(IpX6;0>syfJ(&sM^|Vd1=Ydd$H@r z=lkJl_iqY5a4SG*#)=YB-=?sto>)cKi)6jM6{p9GWA$%X)bC}JXmovjMXf zuMkS}Tor!kz}=Gk7+J-ljI_s(PWTrn%E;8B0xr&co}p`&jl~!)(ieJa<&=@~_$2?p zL{t@j2Ijv*Vl+|=Y}B^->-hT%FE3pwuZ}3RHD_p4WaLT6XO_m*^TAz671$Lk*lH6L zORG1LLAVr*jg`|ZwuKF0{Td^|SH4I%lu>n&wqVr+Z{a-#$LjYid*v2qwXxiF;psA?+N(^m0lkM?C_$VteaP)JCYN=blMGDA?H=qW7& z!^^)5Lssw&9hH%O&^3hfZ&~y#TYZ}qW;J3Xr<%%_DExRY8X-*z)`etyJ_fyI2kE?Y z^TO*IaF*HlyY?;8TkXc+9>6TWN}nEVj&sx8#0dhZ_>AwCSo;;G|EDGdJJJTK;pAX7 z#h5UEtL^v|W>HOYs0V!D0E>-P&d+;w7t8@Hk{NLXNL4SlrM!8w5&5Kp$-`dI#3!|h zWMG*-=T%wVkS<3Gc#@=!Av8NGL3fLrDE!~x=r+wbYlJ-ht2{(OZoITXQIY+Jd9$a} zbU*e;&lH&rY(wLQv8iYl>A*pDmcBL59(;T6B703Ydy+Gu;0ym*w%N4@ zrs1SVBiEE(6w;-&P}~;`P|{cPJh><4zS65}f%71y=z_r2>TU?P6~`;?=l&7zw{!X!x&9QbGE_vXIHz z(njAzRE1~%ciP7z>FJxrk~mFnpV%doQUdYuO@F2r-1C_u^ZE8(I%d_>WnIR}=ggR7 zAi47eTX-sJ8k7h}XKUT54EUa|h(yc%IGl_8SxdjLUD6d2`>Xa>k`1&D#;;u!{2FV+l#mtnFJ(Yb=)077@5soABHY(^ zTahhZ7?^cs!Ajly9nFutHq(Cw*VO!e(bLltKRG#R8`Hb0*}8q>#*H}eo8Xh`iQ7Op zpHj$gRES1U)sQpX{+USnf9s0JKY&*fG+s<}FiUY9W0Z{k;QuNnrn>(jCMJDlrHlEo zJ=6U0e^C=>+@K#pBdbBeAB+)vl(c$I518+HOR*~`DBOw6Ut?lmpa=^OuLZAbI9SW6 zBu~O-WMs4x+OYs28i1D1KBL3dANKeYBaxSQT|=q7qg&2vV8tt-s-&q{anCaN{{e(o BS!n?FxLyrV;qEs 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 E2UTz1CIA2c literal 0 HcmV?d00001 diff --git a/docs/chapter_tree/avl_tree.assets/rotate_right1.png b/docs/chapter_tree/avl_tree.assets/rotate_right1.png new file mode 100644 index 0000000000000000000000000000000000000000..3463c56f1a2ee20858b273ee4872fed4e4e26a61 GIT binary patch literal 7734 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 literal 0 HcmV?d00001 diff --git a/docs/chapter_tree/avl_tree.assets/rotate_right2.png b/docs/chapter_tree/avl_tree.assets/rotate_right2.png new file mode 100644 index 0000000000000000000000000000000000000000..49a4c094a68018824cc30cb1bd73ad8bf3974e53 GIT binary patch literal 8142 zcmb7}cRU>N`tNu38Z1`L5=JM8AXqIScJC-BGOR7^g?(??MNhB1NSI3fP ztF4b$q|=M(v}WAIkBO|VZ!^2be^Rzj5c)oo{!7a&`H9%GPjV$^FGfqaS z*>5Igbj_?a0f_HySi+l!1!I}CJesV=`ufSTPiI6ZnC=iW)$6f1rGbyKyS-CZ3Wow3O;U);G85peS51B?N8p0zTBR8cffS1Q=(`QA(jAvrV+ zWj@3?H8o}2=zc3)me~3YW9hM)4v@%Jpieo?Ku0Gi`)s|x)A8<3(^<7Kg_U+wzhDgD+HRraDit`<*sr$wE{3p3;5;;Nox z)K69`3=s075jV8ae!DTz(a>ou_Qr=AXRhY-c|rj`z9thZs}9*M&S;LPt;MzY*5lC7 z&^II5GLm2RNycYpBAq6R^Kg@1_vg>56(%*G66;xY9wxwsOQ(<7t90m)tlqR*mO+rt zrJbD}YadE90ub@sR3FNbZ8<49x;|R#li?9JjTW51105!g%1|Q97e*F*yxHi zJCyFeB#y^@r72TWQ#s~Z0l{d1!!J_i4t6+O#%E)Hp~W}T2r+h-axhh>8~5%*O z=}))>B-|ETTl~-VzEW6cQ-^cWA=7|(w%iF8H2Dzrhd0+-!#9CY0F8R;PCMm6`K+X=>1(Py zLi%EUr^s^(TWLl^7B0=^VRxk21dn19u?Afu9a0rg_xRCiTXit`<08kq%^etw>+5%Z zaT8}L0!Gha+#g=wGk*i*W=ED)H8!3<7KGXCTx(rbHWKvWx}p3;IWZOcD|6O5WbyUnfiT2oZy^k=+qg z6Qf1kumr9CSRz|z1AxX^t8bi$3Kq~*T)e3>MjRPWU&9_u9Aj^9e=y(Zu|^BEOght1 zh77#jo~~N@E?|VAc<(=F^lJ0)`Qewm2bl*8Eew$-5M>CHp8@*D*RNj>oHA0o-^&LH zQ5eyYh0o5;&B?D%O8~o-2oARBo4D!N$zG?RqGAL?ANhwq@}Y5$)=u9P?jSrGK-=VF z0W=tryrL~vGdqp=?)tSM+sv&ju}5fdHd$abD~xBGi;L@BWhJ47mmay+9Gm}M^{PXUQZw!Ooue0w?Rh=iypK(3oz1vdzZ2-xw>g2SI|3a)% z7UaF^+H1OFA_ILN=rhPjIqrS@C_;cgB_6nHBU$qC_8Gjfw{uefca*%b<%TQu`tinK zHYbG&Gv_naGTTqztuNCGGs{k~)ZXNclH{cw|%dU`N zUSO`CFhW6pZsr0)mB^fjATeMivWHq};13VC*M5MKFLy>=vfoHGVZ~)*&55vSEy*sn za(B#OK@hpuv#u+*A8%uXCurKKTT91;$j>h_Rx*~|pTSFAb+yj``1e!oT2nxoP?4J- zMJJpg^dHB#yLQCCLEl5jXNEAz>EcmLQUgMI)xp_o6~Mik;O%$Ek8j}lb4E>hLg)<^ znHqOoJfI>exrHUPJ~d@&w=!<2ZSaUX8=PhtL5<~Ydm@V*Msse?=oJeHWWxK-Re?25mao8x@Km-+_mHmTYDOPPadmz1Xa%CZIbBf z>OT9m+8g5wQUy;+x#hG%=#cBZ+$J>%_~!z4pTXyaN?(1hd(A{Za>UC^e?*GBh3JtL zb3?n5jD_(87o5Qwej9f-Jgf+pW2ALv+a%%{PWjL%8+!+DRy_Bco%wX4TCciSj8x*7 z#cRvT_?L$7S-^QK-o0~t;^^3jle`>_B$lHRP@0&3MosbOi+YZztVTvt7s5l{V7DJ{ zH~)KVQQ8z+v8WI-tDl!e9a-2zXSFx%^V^ZsAxj3io zBHc}Wb0}Fj|ED;XX+ulP9C_d4M`k+PP0rpwwsiJp>&mx(Y)?pK6dQoqO)~w)LSj&w zR#BCFBm3s+jA}Yh_DM~%j(3)Z%NWRjhbH_l%3LZ4S+^q<;Fe+oQ_QqsE1gHJ~4-d!;33T<-CLd7*GZSB`os@Az-PQKuzjOZ@B1~|o)}&uk zI4lX?`%)6kAlSyY(j5&P2j9`=>30RqZRiZva}QDsJ-ZesFsC5 zOK()T`ZBIaI%z@ed&as%xUuiimvf}SH3i5gVzWOlURx*#9Ngl$M8iMzz$O}iF}Gxv zVeyx3e_r3IigsqcGFb{keXL_Pr>j7$=6h&F=1^Hj$+>+i_0uNTTJwGNfwEJxLtHlz z@Qe)9kdIh4K|I);JgnH%k=D6abQR}NNA?bps1!`&63JNL!|0lFylQL3*Ge)_=@P^^ za#=JM4J>k=ie|IR6C8RTl#im~mWU4Vvw5!v8YQ^tv;k2Y;A4WjYY;2wBPVyjK(;`D8n!IUN36nFySQ%J-T}J&ikRWV zi>u#J2dH-Vg9kbQqa?SzrRk60VZcR|Z1qkhKpvpPLprLpmHaq40q>kTxZKi2EwLx3 z=mlOd!|Ah|u&BrT_T{Yazk~QwkpJMWsPCwg5180K2iGs&2 zn_udXH#Ou^6v~$FRC+;0s2Nu`q1EMZvzo;-+&u7$v1@nZ5HowU}GgQRryLs7#$b-{B%P&AErg7fb_AaWV z#ON*qe15dCq#Ffj!7Z*U{1IlqD(F5|%@3Q&*UMu5EfM$;z+k8#wL3K`mC{cWXO6@~0U$ zW<|@OwGOlpl>Q}BzUkzYp`qLe@cq)29{p)w0vnW)>j9@j%56!f5ACi@-`Fc&9A6%r zMshrO#VaY3vGhnSO2vvhO0bFOH#Tu$+{hGu$$@u-1;v~s@`)JDe4)fAcX-vF-`t{DIZwBzAOJa+1D37a2Bj67+L?35qiYVtI4w+(YvB09hYxi; znpw-FnD4g#pof|EKpCj8W$f1)2XZDPMG?1p+82F2y$4H?Z=MS9U&q`(6v-HHf>tjR zABHnny2BS#C9I_3p$PO9F8T2p&61+!=jVrD10hjLJW@(Yh3)OIe?c=NVIeZD>zD)* z9dWe6eCH8K`)Q>csYw!$$$t~32n;kgd49vpxA{xDC6EcYCWeuXWJ(_F=g9gq`UYi- zgm2IQbP0MTnjtK_S+2cn9xDJcLS-2NAq#iyv#kbms>IXHYRm%zIMQrt`cmOE+kHPJ zRUr)lr=Y-Am`pTjGt{-DJSo2jaDkO>Qy8O{}XuCjZ9J(*0M3{$i zC$PDNG@j=`^20(n{u8UIL)|}6Hz5B7*6WYpu%CiC$?lv*By>>`HrLaZ{z8?rDJdyG z2RQRB22cc1fceXLCs)^3EIhleNnt!k_(URh4;=In53P>;J?N<#RM3y$p-O0B<$|%_ zH~@}~;A(Bufbg4}n+J$NV~*}!Q+2T{w<#DMxn~0ZxZkc(rRnJvZVYD{Q$ihu0_8?k zu1mE}v?ndZE1GZ0Q7A_PxI z-UIZ(o$djb#VT4TQaf9zhT;PTBy05eT9Y*{bP6f;4kkJMK*pHXzor+>6?3p z%Tiq0eGYOCM%6;YRICx`?Cjq;#ZFR9O|kcOM#pDoqqTV_v5Si%fOz|D#V$?}0Q_Za zY;0vWUU{SDgY+#@yxSokIZ3R&Ae;!R+v4c{qe`)dXSkRVp4N5Ti7$aq%%UOy>9}k3 z>;f9MzMwjcxs)IDE~# zJj9PYC!BBbaeI^4N1=Egd#t`EJ%uJsc$*m3qL~^nFQs8x>qvvk$b4Qb*!Td|Ew^># z_SphdAN6p$12#Q00%N+5K+4K$i7`MaiXah4U4@@2K?KNsT4c=m_YJ2>OJo1;u5I3q z43VuwRy+l>0M*UhIy9^;Xr+hnP*sR=ls2I+a^l2)enwy^eEMy(ej?1DNge_ash~LsFShyX( zJol-QqHXK!R=+X$Hfeng^oJ~1@sT{A&e_5X(L$l%QSiABb(D3!2LCS%DQDAfl9!W- z>@Nu3BdgSlTUW|K0XjUYEpwk<>$j_;yqxpd6MzViIq`emqSOB|m=|Wxkk>ux;&kzU zsS1HTfs-w>$i8ibuN&QC3#|iW`o0;WneAqr~`2qC@I>dbGG(zEXR0JFmUH{rCCNT7zx%%v%J| zb;VINgXlRyX7iet?A7FZ1?LU}FpDAP!o)%fkXS2R!_Aa9I|3G;e54OR_?(=b{mmz8 z-JPAC-?g>L^2o@v2uVsBk%!-p%F4=WSUW-q1xtck_eHAuQ5K)XKu=h=*lLZ$!utYc zh{6HRAHqlXK^;FlgfF;*Z(iyjg(l3=@J_u{K!->xKF6PdfxOZrJ#sXY&A^Tc2bt6a z=qp&K8L0ih|E`>4X95TgULFKLNpj0v^+8|#1Iy2$A^Y^#grNPAK%QWi6N98Hb@VBy zapt$YmC1a@hZk7MTcNLEBc_8~ezR3T`u{`ZBX1>i&z@f-0#*~Fw@}b=_LdOBElE`# zvXbNu8g{Ly_m1F>#7D73RkA2>iZje6$ER28_D@@*G(Zih<^`Z^ofBk)43h8omNez2Awx@(pd zG+rIcMq^-J8$1N8c!mC<2S_?H%Dn18Dn^j-zd&BLiY9!-MOsyM(tMBf*?3Vsv7#U+ z<~6Su?Xp3jf%*I3SbzzG-=UwY+4yBoA!^+#S+wm<4@uj}B2{~N zG!yw3`5eo1K(!{FVNz^Uh@Ax)M82F0YIkTS-9awk$rBy&fvgOmI7&@Nbdd-AJ{8WN zF+98J#2Rt{S|-#sATUvYq7V7+m5`YSm#q%r%^xn?=3ofQNZtoe1AL%ESg=o$SBW0Y z=mP}$n#@tpis6VR8-UB_>1F81ku5&}Va~kqOXpzbohSh{2GtqA6En4 z(|`u3wJS898}6L%FGgNs)5>^hVK3{4@V}?372n6f~O^KnGYZMHl`OqMbf0;a@ZjcI{Ai?8%+KxQuC-`qdzj zh@*=iZr5GQ(VJvcijV0PAx_5#k`GZ!y}WP&PRBQZ?qdM*ltn&D57ii%dJ~PvoEuS= z84xsGS-B%^h~NlJ)qmr{m5BD?AiV{9{@qZ-7RHlPMMTRn=D};G@js4d96GO%v zCm&2LR`Ek)Y(6LRHDD~;ROMY$LP6Rn)I7OAfc$SSnr2aDNWCfOw=}m#hF48>^^t+b z1S5OC7BpPtvGqX|@NXx2XKBg(x<3|Ok>Wd!g9KOX^t70;tre>d9gJxwXd$t%_3hi` zBF}Fll(jOUjv24)2UBgnjr{Z+9r`CoDDx%dCAbO?tm8v6^LKm?@A2j#`9@*BE?q}Orhe=SoYKF%_;vwBt|DXCgvhy^aqXG z!#)%vL1|@WFHTzz))YCVf4iR&!eQ+HLFqG8%bMEI+vbt~G=1OKlt@ZQ*dDF+;_&;| z@1?I?YTn-BSd7IlLypArS_`HiUo8R{i^S8dr?=&eAKrpZ6l-+H-;|M#S}P>DnV^pr z6c!LL^Iz>D%~_tk{p;sJAFgWA5>OO7R#;n0hx4#&h2~Hm|MIwh#GwYNMSKZKK5|-| z{KfPeK)fDWJLvThf*ToRX}Q?qFp@<|PfstkBeC6X&QW5nkNGc(A4u$a)-Fhq;5Do! zIV&Uj;O~Y1N$=A9maqSt-Z{fJ0!$cTrNd%!##e0<;>ZtsZ&y8X|7K#(1)(e=&(;xr z7M}#rS@JJ(GRcQCie>kVodyUZdpPTydcO51a#~$fMqIN7 zhQk?lT{}76rz*bEhND^5p^CcL=#Z|0BmieB$GObar;MbDK0pv3*{-Ttd>6!4;To>37kqd|Sdj%*}qnwX!b(7~~~8<^*1SJF8cKdm}Xj2|edI&UNCdr9Qs zPaql#Q-CX=1NfNZ_N&Uv?cjp9xV&u;dGJ8V8w}z4XrS<)ZunaJF`LrhNHBZ_<^E`? z)wkwQ9N|+>$_UE_Ogf%Sm3@4h|h9PNtf!w>jf4YijH3kI90}{QYH;CeNFB;p;CG$bZJi$KSZP zTk}rG(C}Mg0+Y|97_{sQ^OcpR0e_5k9L^`te+U@>t-LWB4%xuNg~$NQo}jJE zqiQHhPyg_c+ zv+aZxhwc#q@mI)kDI*Vq5)H`D9eP*-LvY^@0C~(|;9qbc4Jh)YM@C@6B|``=ftxtuiw*>M&TTCKKRgc-`&x# z@yjz4tTUgX?-e2C&S-WO3iZ%2F9MbDh|>|bGfI`};FdX!>YX)LZy$lJYKNqcH4t*+ z6`T4wGyf4C{fnGpWSfPW=wz**<~T!sT8VOf$#`%yfj}^#E6oNM|Qw8Ai#Ws@+V`OWtkpM?ITRk+C~3W(mZ&absI)! zsIPxl{O(7Ch^qRf$rk!DnR7$CVoGz61Xy3=iKPE4e^B4v&jct8RBG$E=noQYCR>G zYt@6M9;Pe+Coo&wN1!z+{U&88mrD_V?l=~E)>!Pcg2iIB{r&wlpFe+Y=IV;U8SfA& zDJi$UwIfrI8y-rQ-B+35!J2VaS9dk(62sv&yTYHjs-HrC>+~R`vZfN|zIEvT0*S^~ A2><{9 literal 0 HcmV?d00001 diff --git a/docs/chapter_tree/avl_tree.md b/docs/chapter_tree/avl_tree.md new file mode 100644 index 0000000..8a46f11 --- /dev/null +++ b/docs/chapter_tree/avl_tree.md @@ -0,0 +1,309 @@ +# 平衡二叉搜索树 +在[二叉搜索树](binary_tree.md)中提到,如果二叉搜索树在进行多次插入、删除操作后,二叉搜索树可能会退化为链表。此时所有操作的 +时间复杂度都会由$O(\log n)$降至$O(n)$。 +例如,将该二叉搜索树树中值为4的点删除后,二叉搜索树就会退化为链表。 + +

+![binary search tree1](avl_tree.assets/binary_search_tree1.png) +![binary search tree2](avl_tree.assets/binary_search_tree2.png) +
+ +为了解决这一问题,G. M. Adelson-Velsky和E. M. Landis在其1962年发表的论文《An algorithm for the organization of info +rmation》中提出了「**AVL树**」也就是「**平衡二叉搜索树**」这一数据结构。 + +## 平衡二叉搜索树的性质 +顾名思义,平衡二叉搜索树也是一棵二叉搜索树,所以它满足二叉搜索树的所有性质。**另外,平衡二叉搜索树规定, +树中任意结点左右子树的高度差的绝对值不能超过1。** + +平衡二叉搜索树的平衡因子有很多种定义方式,本文中规定: +1. **平衡二叉搜索树的平衡因子(balance_factor)定义为左子树的高度减右子树的高度。** +2. **空树的高度定义为0,叶子结点的高度定义为1。** + +根据平衡二叉搜索树的性质可知,一棵合法的平衡二叉搜索树,其任意结点的平衡因子$f$满足$-1 \le f \le 1$。 + +平衡二叉搜索树对其平衡因子的限制保证了平衡二叉搜索树不会发生类似于二叉搜索树的退化行为,也就保证了其各种操作的时间复杂度均能保持在 +$O(\log n)$这一级别。 + +## 平衡二叉搜索树的操作 +### 查找结点 +平衡二叉搜索树查找结点的操作与二叉搜索树一致,在此不再赘述。 +### 插入结点 +由于平衡二叉树需要保证其任意结点的平衡因子满足限制,所以在插入结点后可能会造成平衡二叉搜索树的失衡。例如,在插入结点前平衡二叉树如下 +(括号内表示当前结点的平衡因子): + +
![avl tree 1](avl_tree.assets/avl_tree1.png)
+ +此时在树中插入值为0的结点,插入后二叉搜索树如下: + +
![avl tree 2](avl_tree.assets/avl_tree2.png)
+ +很明显,值为2和3的结点已经不满足平衡二叉树的性质,这一现象称为 **失衡**。 + +为了解决这一现象,首先需要观察哪些结点会出现失衡。不难发现的是,**出现失衡的结点都必然出现在新插入结点与根节点的路径上**。 +并且,**从新结点出发直到根结点的这一方向上,首先出现的失衡点的高度必然不低于新插入结点的祖父**。 + +!!! note + + 可以利用反证法来证明这一结论。 + + 假设新插入结点为x,插入x后x的父亲p发生失衡。 + + 首先,二叉搜索树中新插入的结点必然是叶子结点,即 + x的高度为1。由于p发生失衡,所以p的另一孩子高度h必然大于2。因此在x插入之前,p的平衡因子$-h \le -2$不满足平衡二叉树的性质。 + 故发生失衡的结点必然不低于新插入结点的祖父。 + +现在考虑如何将一个失衡的点重新调整为平衡点。 + +首先对于一棵二叉搜索树,其中序遍历序列一定是严格升序的。因此,可以考虑 **在不影响整棵二叉树的中序遍历序列的情况下, +通过一定的操作尽可能地降低失衡点左右子树的高度差。** + +根据论文中对这一问题的描述,可以定义一种称为「**旋转**」的操作,其可以在不影响二叉树中序遍历序列的情况下,降低失衡点左右子树的高度差。 + +#### 右旋 + +以上文中提到的发生失衡的平衡二叉搜索树为例: +1. 首先可以找到第一个发生失衡的点是值为2的结点。 +2. 以该点为轴顺时针旋转,使该点左孩子的右子树指向该点,该点的左子树指向其左孩子的右子树。 +3. 将原本的左孩子连接至该点的父节点。具体操作如下: + +
+![avl tree3](avl_tree.assets/avl_tree2.png) +![rotate right1](avl_tree.assets/rotate_right1.png) +![rotate right2](avl_tree.assets/rotate_right2.png) +
+ +可以看出,经过旋转后整棵平衡二叉树已经重新平衡,并且中序遍历序列并未发生改变。 + +这种以某一结点为轴,顺时针旋转的操作称之为「**右旋**」。 + +#### 左旋 +上文中提到了右旋操作,下面来看与之对应的「**左旋**」。需要使用左旋的情况与右旋相似,下面以例子来说明左旋的过程: + +
+![rotate left1](avl_tree.assets/rotate_left1.png) +![rotate left2](avl_tree.assets/rotate_left2.png) +![rotate left3](avl_tree.assets/rotate_left3.png) +
+ +与右旋相同,左旋也可以让失衡的结点恢复平衡,同时不会改变中序遍历序列。 +#### 双旋(先左后右/先右后左) +以先左后右为例,下图中失衡的二叉树如果直接对失衡点进行右旋,会发现并不能使失衡点恢复平衡: + +
+![rotate left right1](avl_tree.assets/rotate_left_right1.png) +![rotate left right2](avl_tree.assets/rotate_left_right2.png) +
+ +这种情况的解决办法为: +1. 将失衡点的左孩子进行左旋。 +2. 对失衡点进行右旋。也就是「先左后右」。 + +
+![rotate left right3](avl_tree.assets/rotate_left_right1.png) +![rotate left right4](avl_tree.assets/rotate_left_right3.png) +![rotate left right5](avl_tree.assets/rotate_left_right4.png) +
+ +同理,「先右后左」是先将失衡点的左孩子进行右旋,然后对失衡点进行左旋。 + +#### 各类旋转对应的使用条件 +上文提到的四种旋转方式涵盖了所有失衡的情形,那么该如何选择旋转方法呢? + +旋转方法的选择是由失衡点的平衡因子以及其较高一侧子树的平衡因子决定的,具体可分为以下四种情形: + +* 失衡点平衡因子大于0,且左子树平衡因子大于0时,使用右旋。 +* 失衡点平衡因子大于0,且左子树平衡因子小于0时,使用先左后右双旋。 +* 失衡点平衡因子小于0,且右子树平衡因子小于0时,使用左旋。 +* 失衡点平衡因子小于0,且右子树平衡因子大于0时,使用先右后左双旋。 + +为了方便起见,将平衡二叉搜索树修复失衡点封装为一个函数,具体实现如下: + +=== "c++" + + ```cpp title="fix_balance.cpp" + + TreeNode *&fromParentTo(TreeNode *node) { + if (isLeftChild(node)) { return node->parent->left; } + else { return node->parent->right; } + } + + void fixBalance(TreeNode *p) { + auto rotate_left = [&](TreeNode *node) -> TreeNode * { + TreeNode *temp = node->right; + temp->parent = p->parent; + node->right = temp->left; + if (temp->left != nullptr) { + temp->left->parent = node; + } + temp->left = node; + node->parent = temp; + updateHeight(node); + updateHeight(temp); + return temp; + }; + auto rotate_right = [&](TreeNode *node) -> TreeNode * { + TreeNode *temp = node->left; + temp->parent = p->parent; + node->left = temp->right; + if (temp->right != nullptr) { + temp->right->parent = node; + } + temp->right = node; + node->parent = temp; + updateHeight(node); + updateHeight(temp); + return temp; + }; + + if (getBalanceFactor(p) > 1) { + if (getBalanceFactor(p->left) > 0) { + if (p->parent == nullptr) { root = rotate_right(p); } + else { fromParentTo(p) = rotate_right(p); } + } else { + p->left = rotate_left(p->left); + if (p->parent == nullptr) { root = rotate_right(p); } + else { fromParentTo(p) = rotate_right(p); } + } + } else { + if (getBalanceFactor(p->right) < 0) { + if (p->parent == nullptr) { root = rotate_left(p); } + else { fromParentTo(p) = rotate_left(p); } + } else { + p->right = rotate_right(p->right); + if (p->parent == nullptr) { root = rotate_left(p); } + else { fromParentTo(p) = rotate_left(p); } + } + } + } + + ``` + +有了上文中修复失衡点的函数,平衡二叉树的插入代码也就不难写出了。 +=== "c++" + + ```cpp title="avl_tree_insert.cpp" + bool AvlTree::insert(int val) { + TreeNode *p = root; + if (p == nullptr) { + root = new TreeNode(val); + return true; + } + for (;;) { + if (p->val == val) { return false; } + else if (p->val > val) { + if (p->left == nullptr) { + p->left = new TreeNode(val, p); + break; + } else { + p = p->left; + } + } else { + if (p->right == nullptr) { + p->right = new TreeNode(val, p); + break; + } else { + p = p->right; + } + } + } + for (; p != nullptr; p = p->parent) { + if (!isBalance(p)) { + fixBalance(p); + break; + } else { + updateHeight(p); + } + } + return true; + } + ``` + +#### 高度复原 +插入结点后,从该节点至根节点这条路径上的结点的高度有可能发生变化, +所以我们需要在从新插入结点向上搜寻失衡点的过程中不断更新该路径上结点的高度。 + +=== "c++" + + ```cpp title="updateHeight.cpp" + void updateHeight(TreeNode *p) { + if (p->left == nullptr && p->right == nullptr) { p->height = 1; } + else if (p->left == nullptr) { p->height = p->right->height + 1; } + else if (p->right == nullptr) { p->height = p->left->height + 1; } + else { p->height = std::max(p->left->height, p->right->height) + 1; } + } + ``` + +但可以证明的是,插入操作所造成的结点高度变化最多只会影响到第一个失衡点以下的部分。 + +!!! tips + + 以第一个失衡结点为根,设非新插入结点所在子树的高度为$h$,通过插入前后子树高度的变化可以得出, + 将第一个失衡结点的平衡因子修复后,该点的高度与插入前相比不发生变化。因此, + 高度变化只会传播到第一个失衡点下方的结点。 + +这也就是插入操作中 + +=== "c++" + + ```cpp + for (; p != nullptr; p = p->parent) { + if (!isBalance(p)) { + fixBalance(p); + break; + } else { + updateHeight(p); + } + } + ``` + +修复第一个失衡点后直接跳出循环的原因。 + +### 删除节点 +删除结点与二叉搜索树删除结点的操作基本相同。不同的是,在删除节点后需要自删除结点的父节点开始进行失衡点修复以及高度复原, +直到到达树的根节点。 + +=== "cpp" + + ```cpp title="avl_tree_remove.cpp" + bool AvlTree::remove(int val) { + TreeNode *p = root; + if (p == nullptr) { return false; } + while (p != nullptr) { + if (p->val == val) { + TreeNode *real_delete_node = p; + TreeNode *next_node; + if (p->left == nullptr) { + next_node = p->right; + if (p->parent == nullptr) { root = next_node; } + else { fromParentTo(p) = next_node; } + } else if (p->right == nullptr) { + next_node = p->left; + if (p->parent == nullptr) { root = next_node; } + else { fromParentTo(p) = next_node; } + } else { + while (real_delete_node->left != nullptr) { + real_delete_node = real_delete_node->left; + } + std::swap(p->val, real_delete_node->val); + next_node = real_delete_node->right; + if (real_delete_node->parent == p) { p->right = next_node; } + else { real_delete_node->parent->left = next_node; } + } + if (next_node != nullptr) { + next_node->parent = real_delete_node->parent; + } + for (p = real_delete_node; p != nullptr; p = p->parent) { + if (!isBalance(p)) { fixBalance(p); } + updateHeight(p); + } + delete real_delete_node; + return true; + } else if (p->val > val) { + p = p->left; + } else { + p = p->right; + } + } + return false; + } + ``` \ No newline at end of file