From 72327ba94b1a168b65d0ce6c1b9565897d2c72ce Mon Sep 17 00:00:00 2001 From: huihut Date: Thu, 22 Feb 2018 01:06:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=93=BE=E5=BC=8F=E4=BA=8C?= =?UTF-8?q?=E5=8F=89=E6=A0=91=E3=80=81=E5=B9=B3=E8=A1=A1=E4=BA=8C=E5=8F=89?= =?UTF-8?q?=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 ++++++++++++++++++++++ images/LinkBinaryTree.png | Bin 14908 -> 15038 bytes images/Self-balancingBinarySearchTree.png | Bin 0 -> 8601 bytes 3 files changed, 23 insertions(+) create mode 100644 images/Self-balancingBinarySearchTree.png diff --git a/README.md b/README.md index 985d52d..afad8bf 100644 --- a/README.md +++ b/README.md @@ -303,8 +303,31 @@ typedef struct BiTNode #### 平衡二叉树(AVL树) +##### 性质 + +* | 左子树树高 - 右子树树高 | <= 1 +* 平衡二叉树必定是二叉搜索树,反之则不一定 +* 最小二叉平衡树的节点的公式:`F(n)=F(n-1)+F(n-2)+1` (1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量) + +![](images/Self-balancingBinarySearchTree.png) + +##### 最小失衡树 + +平衡二叉树插入新结点导致失衡的子树 + +调整: + +* LL型:根的左孩子右旋 +* RR型:根的右孩子左旋 +* LR型:根的左孩子左旋,再右旋 +* RL型:右孩子的左子树,先右旋,再左旋 + #### 红黑树 +##### 应用 + +* 关联数组:如STL中的map、set + #### B树 #### B+树 diff --git a/images/LinkBinaryTree.png b/images/LinkBinaryTree.png index 5d8aa88ae49a6f9cece21f0fce0b8c24585722ef..94fb411337cba798933363539a10dfd5797978d8 100644 GIT binary patch literal 15038 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%0DjdEsGt!V-HrR2I6R>oDNB2kT-A zB~%N9l>R55j0x0Pt zA|dfu02_?tEW)4#up<3>^DD0E$IQfv-Cw(q*J}K?fbK&J6ao46-bnS6;n|#*f#zn7 z;p}{Zf_1>n%~+2Gpc-+gTflI7cRrJ+1dnrgiffcq znufpq%vc-FBh37hxR&Yj*;hT z7@r_Bv7nHUko@J#e=i^kBqHzGHSEY&STehJ)jT~tKRI^egu}geRJF9K{@4^Oks-Ar z4RCRvAP;;w8Mw-TB}KGmOXWLyUQ7@eOCD-W9^pkM=1LD^Gpyx^%7xPxGWpart*!ZE z@N@_>HIJH>*0N2W!Bq-$15q)vqJGDXV{tjUA4qO;r|%P2lRFf7AHcjZJdWv-op^){ zb{^Dcr}&aF(b+WXsS!RbOmQnlipkma^jMHLvz~l7)cU*Vqh}d6&c@7^`UQE;HZ?No z=^fFHSR#Ar(F!b>@?%^-*Z-P6Hcq~8Qr=W!QKKA}@%W`qJCO*xMrcEi8h#O%=V_ zo9G`X%vagbCZT|t2f%&ayb{)NN+e@ceuQ;;)XMihqW z?iqLk_+243HiplDHPD%@{T3gBja~!U6edv}`S5h>Qv^A6pWp>(>Iex5nIqaisgbWb zec1j*m7h}_eY*}O3)l}?m(?ipAdsd!=af{mIRu1+9w%50WOsgb@VbUjdt9VfkxH?S zyO7>$_kgVehHwhMVeYL`trKb5XIE&A!LvAz4(prBB(~r1yb$T1XF!39Z^ZD`RJMAh)9wUBaMRl$l`A?n*0Ug$kF&_U+t;CJ?`jA8b$(a= zxD2^7>2@ta@2pF6swTFT8N!0l`|2<@&&sM44EPv6RO{kzGbN91o2wFWt8lg-^XzRBTN65sM^4|cbEjx)004Ki3EQ> z_O-ONN8!$EbbG1t)4!eFPonnhwa8N!=I8HYdv7%14_YlYB(!SK|_X;rhdD>c4NaMr%UXYqD+YgnO^k=Uq zUs3J;3Y91mz`I|q2nYBAyvfV6?-w7>%F;w~DXO=HbK9lJwOdtx z>BNegR^*B!=OP9^^Be}xkJun}V+&e_5pblQMr^4tF^OwHDr$gp?J!;5Lt&PJ8oT6H zR?!}2$7GOn!^(>I4H?(epI#g)ZqT8ZBw28OHGzy1w0&`%Wqt*f8Fd^LE)7{)94sqp z3&Ig2O`3_92gycmiGR{{Uy5F+g+pKN8ul$D+GWg>3imi9mFCA|Upi`BlX=m=ysNRl z8budpb;!Ei#Y>&B++`KFw zXZF{pyYz9a0)oz#qu-+8BhKkGUxxtt{>TJ!%_1El^AFV;afG?e+njl=owS=!+VcDD z3XhZo;MQQDuqs?Q%J{a|UHb*7F-K8R(SrrIz2R!i69jsL2(Rs>Pp1M`oz@>Qhfey5 ziQxneb)*$itouWCnyuTkiU*etVeB)Qo@H|(uKh;STDdNFfJcu*k>iFHcsG`bR)Pxc z1kzg{NuB206{FYYf;J|^oV9|s*24)Jo=MB;lo5&hO)r)u#Kl|1Xzrz^@>O_vG#42N zCIn?zYeDLfpPqe;!Jp@!^gu8atFO#i^V#VdT}Wqc!8D@wUGy$u$I|BtSwn$JnTLuF z@@qbddtl*o&t?7xk+q}6zZOmltyVCeYV}*rHINE|)zha~-McL*eJ;QNF^jzZDmyi6 zjvYxN>pZ})QKFA|cz@u*g}-jxl{Uc+WsBX1^++U`8n z6M4>%pCH6KBqLkXRSPIrI9*VAK40iNq;%c47Yj0=SGwK1DII8T^km%>vyl(5D(6YN zin8)(P(3lWwY9YdgMWow{%XE{)bjoN^$quoLO3)7ne%@my1rH_wbZMA1bX#2%7TGG zn>BdH;!5{dfdJGIru#Cb{g2L0k(P+aewE%$3*%mLlASxDnL)O3%vQH~xVfq58H@#K zIAn`sqSwUG$}Vh@N5`wxkSfv@;UgZ~OE8@{2a|}I`>YMrFrXD#5|LqIV89jP_4)08LK4ZkPY3QHOr9_`kkERSX_u;H&VZQP350Bh`fmrqQ5^3M+P&n%n7;6c6 z^fuw|#%*x*?G z2Lltyt33E9J{^_;fEU@v9C28)(p)5{;RZ3M; zGcd!NRn|j_`LBacvAC(_GIJdPl82a+%@!yMXy0>rB5w8r)%*^nD zS>Z`49~n%cr1l6Kdf{Uz8JL?84?T)Vm{?v7KOOw}-o(dl*I5xQw$fCqS{&?gdBf^c+-+lLG~_+NUPh}qd9T`8eAuJf5!@XPox}JWzS1rCt@$E{0%&YVGJ~1TRQrT-;pL7Px3ct=dmdOi!QT z=f6&c&d}G__b2?o)Zk#dhGVL7CXfkTT{OB-^wrp@M+nYiu&>UH~vA(Yx5uP zt{4BE%Xa>$r$0Is@7OS%ye=s{M3rrUhGwf7d{<;e`j?E zsF)e65qH3aB|t$>yJzbFFkAx<%=`CzpbF8vyyP*)Zn1r<7?a=o#NY+^-$2|Q_2RA2 z84J)nU4Uo#)PC>3;Z|@iF)}EyIk8l^=b)_O%-zHJZOq@C&>yGrX;GtdA9iuOF8z^y zySMx!otjz5kQ7bIq~dv5MrMGQ^PslCRGH<`+QfCiyM;8s0!3x0a0L6tTacH}jwO}_ z(Cw-jFj2$#8pItg`Xb1bwsn>G(SG67UlUVP7Qi~8+s0T} zaMLSws=y3_82R`s*MzoO7i}sC)MJCh$4}|C-mln7+89 zs2cGWWswkl9MsrRd$Mey<8V0G&LoST1q6`Nu!LtfeX$x|o(v0cHU?2{l3L>`A_ zg`*l(aRm#e`5=())rXu|wCP|uNFC7w90Rm172=@R#9Ih78}kayzkm+?j-T*EhyS4% zv#?1RAi({tqN>S-s}zJ21zgA0Ei9L5ZrSeyqN```P6B9`kDs3~rFjmnrj)mDk@cyz z^*L7SM;x^x{cNrCei8x~F2HCqXwbpYJ;jM9dix-iOTuwT7VICK2Y)wfA&<0$GcsL$ zeu|JqnOIoH>sd_2W#}S5U`h>M=xmY1Wh9rQ0~B3cE;^UGzrP=aYsFs}52Mg;VXpoDDikADcB1SIX&lwaup2sWJE*ZW=_5O)j6a*OgzUEEq2nKL`- zrbBC2s`&7y!TM9RQ!hN?RwfGImSEGeyhf!4XRRKXWmjh>7B*#Uq~;mmORD0V!ps&# zJ3jqAlP)zDd0+PeGN6J?36J-mtg$+1Zflc!G%&0Z%Ix{`HT_?eE8iwv%zu5nBjr3s z3S$Fx(;b1|avPmWtde%D&>XBborzeXq70Ej`$~{vyOGPkdV4Q@7MWojC~|B(p>Nc+ zwCqlBmKAREhIIVZGcsDp&s&8{R^4B6uTr{m=Olzk;PC#`CE4yHZjk>#B|{+qEdYSL zk@J@P{NgSC_}ucwzi?~EDOtA#)*+vD4fVL5LmbuJi4Xr_O-T z$9w-8Pfg`Md-m({zOv(<%9KsX$`5+K6%vAm1q}URmnwL7eR>?CLIu_(GB(!QO^~~a z3Ze~5XZA8@zIZkxzOwt$-$w;f#=S&HNb1a@J@Mj#zL@_;2l)XvqugfCt=~nCoPW0# zL;pdWyzdCJHt+4FdboO^w>0Hj{kAZ5l8|AJ91hqpr{JGdLx6B8b^dwPE;^~ zHg0Xr<&SeCJCdu{yXn@U5olZ0q@b(!3b1Ek*JHW&eoJc=jF($|mIF3gpEeF4xqb&; z|MH`v#_WaTAuC66s`7`nwkxvmrvI^U3w-qNj+;~uH^4yf|=G5fo;uSb7j2zT?A(TbGLZO1?z` zwM2%LwIHCMlQ= zQxnlJVtme}C)8nT{9TQOk2xhzk1k7SuvuDiaGO%^S`Z=N-uoPY(#yX6=^I%3G`)f3#b8sd&^av5)u+GbmRdbg!*(jK!M!9 zq4$#rxlID>^hM76k%+WTos`Q&Qz^i|hlm|WXlOSJ_FIIj>_lW(B8$FRSP~&%*Jwcw zy=FSm>hY4a(18;5IfB8SU=f6R0UpRe-k^>E!gfLj6^D!ni4UIqdb9WOVHw$L1~#@m zMkJY-)%EYjY%jxA1uK3RTzC9$r^|`AkbUq}8xzndm?cMh*^{K4iMunk8d*$zh>+!< zy}epwBl9?hZw00kvhY*tj4YIRh0m2YMF;VkeqvRz1CBF&Rd<+%Xa5 zd`NdCWv;Vp^eWnG=g*(7tb)OLU#1pkSH6{2^0FxvHd zfR#m--Pho}(xq6Xz<#E!Egl+m(ly$MZxV*L$pU=5%84ity%+#*?g6;PFNn#oXnW)I z@(=_#>T?)b`&U#}%6HAWniRM#8lG10JMH^-!+Kke!4O0ZYHfXe^&7SD+saB4!~+EI zYB)GHlDFg!aL@-gUDDNSJAn}-c}s!jkv<)+VQCfO3ZEh02_N&3p7`xa5kb4 zO$Q45{K(7654sc^&VSI$BH~4XPJ#hwKH&M`n*?Bc5(z&Q7BPJ>;{%ga+z zINTXOm9NC$%VKUSD1PJLdW*Wc1EI0G#yCKb;x#8sW-4 zJm&5aq}s)V8!IyWG>;g8o*x`_S_x=C)d-yB)5UeCsw4+0y?Q`xc6KcaiY*_yj>%}}#fsdMRwY-oAT$1HShNdMT*y=E3cnI_ z*3zsj_hTZ=yKgeA6TyNM`Yu|*@j?D+z)}pkHOO$LYG=V^y4W&m8Dwuu?lg4lj$z!y*nd*KV9x{;`uth(m5q{aliQj(ck zxn?qx#p4i#jR$ug=g^Q;Irt+ZfM(K=t{jj1)hWf9G^3g^2CKyd?hY;f$;0*XuOHzt zjTC}g@t7KbAV(sD48^;}kqjAso}PNsg{-nwmDc zpf9WCdR8pgfQyRwU#M0JQB;$L0RHN>AIBX8Qlzw7Buv4ZKqi(gAZFTv%bB^!vv;&D=q?&Y$|E zcl;=6Yu5ZysK;B0aZHCJ^t2efY`z%cQxyxNp}~_GJ?CMK|4+VL*j8s!By_bsA8ru=EIfPmtXVadhyYJS;R%{Y zwc4FFyOq|z%G@148svRTP-Jq3h>d*eAO_X5?`9`U5xeBlX z^rx}x&$vAry0iQdfQu2@3qjwQpMFDKZiINWw!>a=@H2NIa_%4JKSyZt!O%etBhZUi zBRHP3IhJ=V7$_?bf3tYfL<;H?h2atvWzaYAJU7)E`z-r&W&eT!(}ZDCK7xP{2Md!3 zKds7fxLP9dhn-x2t>AO%gVmRU+g+68Z_M(QxfCO)~Ksa8_IK!Xemr*In#2}4BuKm2uN?uaCi0>Q)NAkhmy3eg;8g)VMz|C^elPg4iHMnFrcl>1&g|el)|AQk#9F zMlazn6NC(}Yn{6C%e?%n!pB}2@lM~1^lFyYlV;saAAEl4g%^d~#gcfhQuW6qD`Z1$ zly4GfkrYQ@*l1s7kel|iX=orW1--Z);_yjq=|EnDJ|QHb{=2c{#z-{X=xFDgzWbLu zJ(t`F+1US&{>4uvNAzwcDLHw#JS*!dFS-mBagK^$(duG>u0Yx(2sK5dx+0Pi{}(M4 zRhi?#`sCHNJWh6OoLQOl+ROBGCTa!-Zz;4d?DDEK^$G05^LtE<{I_lu?>ULGvv1#^ zB^%<@(Wzajk(4LCO{6MMk&uu8>F6XTCcX$bJ4PT7FcK1yh{(tXj*hnq3kx-LbV51g z*(n8sOl;rpQ&;_D(SH*68c~+BQxa0OIx55g;lwNs^iR65qhISFBKqe z)terf^)MV2vA-dzrNng41@iXx_BxpK%vu!EK zXJ_|H5xE344ZVMK+jrmL`i&dj6Z?_WT%|sHb{|X{Ss=FD?<->!t4ZUP&L0n|T)~1! zXvy3oF&GRVZS;Z>^lg5Ae&Jc41eaV4{p{YF-)1wB*YQgJ!f3fQ0oq6{f9H$;$$rMc zaacq|hq+ZYzQ&A#np#{$M8q$MO-xw$YU9P(M(a#-u>YrGN&jQhA32I<(+&Ow1qFwB zofcXRTd~fk3%e_We3=dj+;v;Q2=5jPcZifeucM=51U4aQ)6e$%_iwh_w+HeWRa8`D z)YK>lDVT^MYAhCOjDMiW{;_&CjB$!y#6kZ)G<|NJm(b4o{Ss9Aq?i)FN(_l4sjjXD zw%_W0Zf<6lkd_vmlXG1GXofu$jZH`S^psqdV5g$;ltn z@41?hKm+C0ebtjS9=_Mv+2;uJ2fYhFeRA{g_C6|y($}3E|A_XiRp!`U3tW5@zL`pZ z>U%4Zf=@4D*+nzqy_6AVvHY``k%xz8vy&@RW~GM3$k^D}Q~}N|wK7~Zas^tRsNRVM zF0*Q9Zy(J>(cUiMv+ITR+?cwVi`fI;w+F}6DIz}pqNLN}kJh6{JL-^4pC~G#_xA1E z9IzSS1owr7g~#pf?7m$4`IMd1`2G9$!8Ee2aZLBMbai!=ICOM%yAnC%m1H&3ZEbDw zV_6v4O|)oad7{|O&CR(g32KUF?UTNTNdpI743JLD};0VV%E6OEmQLiFI_g7So)4hT=LczAg`Br!rKwW3}?p4{uw7bsxhjT3iWV9U{eoJE8>$MyERmGlD-tu5KigoSZ4uD7@BmN2g zGY1ol&U>FCp=o3k%PjWXboOiLJ@;jJS67#~-N*a!aI*w?aw@7sy;6N*=MjAAcoqq9 zyPS9LAaHP7H)p@$0@dlMU;NnWX!+8OBXExOd1=2I@Ivk@KU%Zpws&@JyP6HI^n<8j z*8S?1i)e=4QOVDW4(e4+0W5sj?EDgYqiGp@N)%sOTU$Gv@t)tI0Jyin)328x)k?{q zBO~TZy&23-cLcZRjEo1EokAia>e|fQA;BR6$mq}NDi!l&*>rcBh+`1u%A`l|1< zE^Ja#tfQl&%yxsbE<%BiN3saPa}|MYt-J;q^=3*@4<89{5WSDv6%;Zon?D%y=p$r{(RB0`&Gs9)YnilF&3pk2;xjq zTy^09!C4sWSz8W<5i)I$WA68uT)qcEMkBx(;ucdFW4@zgWK?nPt2#&l`=$5zab&#I z`7iJ@Xz-QZx;Gt$t`|vLD;@9#r>_+cwhA*H|Kj+sGlFRG3C@O7B{BjxU2?0Q!kc+g z>14FS0(s?&ya7@Gs}2~yr-^11FqO9W zYWXOu#<0W3sqHBzRx$N{F`@nWwPE|_q}abqd6rr6%=fPSvCG$-$@H@J@zx^yW_@_chMnybsZEa2S zAHm1=XK{ChLr!)JYm~yOwWFEd+;ye;??f!EtT;t8dciKr=VG=XI4f)X?ykFqg~dCQ z#sH94BY!s zG~t>$9t{|`qvR=S)c49!2mT{5>QG8hG4XYFcHRb&=Kyv{g?`FxV&Y-=3OOu~ow@Ch$RXzO^SV!6{o;jPfR z+@q|`HyF3~ofg+}Y@dW+++r}>I*>KYok)PO$yioXr zR$euoGSrHS80Je^Ee6r5+)>Dtq-c0-(n7E&LF*ijCOrt?3OS4~S+(~tGFc6Hca_R0 z6w93ph2f#$*deR(NgJ2zr1-qF#E^jFn9xq(`A+8eq&(F*nRL!c@gr13#d=CnTp?bhP!6VVbZy@{rdK8_9>fo2 zb#>OiZq-&~h;>-PZ{rE#chbaV*P6sc(uxO&(r60{t!m>%R0!Zp##4~#9keh-`20rt zaN@GoI$4bJ1pgyp)p2VZHc~QPT2x43;TdeV3>2^?j+0azaxFiHhgFGOKEmg${3=+P zpv}}#2jls^`-|a}tW(tu4FOT`xp1iMo4!ST(=&6if%;_YtSq_hXM&Ta%{&Ab#G%#|>eFXr=Hk^e3nT>*>*0GKCv;bt=GS9S|d|@Rv7? zKj8nOF!ivo_&v@VaQIYOG6ez3vr)6MQ+SgK($e|B44FG|BSe4j*RLw4i}N#`TaE1! zEZr0Qm5RuXFXLJYvK;fy>PXAJbo&&_}V1-jQI3FL#rM?dl1dC_~|%cs2o89SO9jyOD{x zNZQ?T2a$X%_X%WJCu&H%6$&@Ab9LQf!FPLv2K9AqDEy7w(z`E;$jb4xeS?_Z2PW-i z2;%B||1(DP(9Jp{@+Jbd=Cflw^qyAN@bg-K#-P*Fyu!i(t*#C1ico9up

t60|Y< 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 diff --git a/images/Self-balancingBinarySearchTree.png b/images/Self-balancingBinarySearchTree.png new file mode 100644 index 0000000000000000000000000000000000000000..b9743658cf41daeeecec97c9cbed9b0298a929c2 GIT binary patch literal 8601 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 D)muCU literal 0 HcmV?d00001