From 20d6f12294dc07b19f84dbd32124d3859f3ba932 Mon Sep 17 00:00:00 2001 From: Chalarangelo Date: Sun, 18 Jul 2021 18:05:22 +0300 Subject: [PATCH] Add data structures articles --- blog_images/ds-binary-search-tree.png | Bin 0 -> 38256 bytes blog_images/ds-binary-tree.png | Bin 0 -> 24228 bytes blog_images/ds-doubly-linked-list.png | Bin 0 -> 22074 bytes blog_images/ds-graph.png | Bin 0 -> 21884 bytes blog_images/ds-linked-list.png | Bin 0 -> 21829 bytes blog_images/ds-queue.png | Bin 0 -> 18747 bytes blog_images/ds-stack.png | Bin 0 -> 26291 bytes blog_images/ds-tree.png | Bin 0 -> 24463 bytes .../js-data-structures-binary-search-tree.md | 217 ++++++++++++++++++ blog_posts/js-data-structures-binary-tree.md | 162 +++++++++++++ .../js-data-structures-doubly-linked-list.md | 146 ++++++++++++ blog_posts/js-data-structures-graph.md | 168 ++++++++++++++ blog_posts/js-data-structures-linked-list.md | 140 +++++++++++ blog_posts/js-data-structures-queue.md | 74 ++++++ blog_posts/js-data-structures-stack.md | 72 ++++++ blog_posts/js-data-structures-tree.md | 136 +++++++++++ 16 files changed, 1115 insertions(+) create mode 100644 blog_images/ds-binary-search-tree.png create mode 100644 blog_images/ds-binary-tree.png create mode 100644 blog_images/ds-doubly-linked-list.png create mode 100644 blog_images/ds-graph.png create mode 100644 blog_images/ds-linked-list.png create mode 100644 blog_images/ds-queue.png create mode 100644 blog_images/ds-stack.png create mode 100644 blog_images/ds-tree.png create mode 100644 blog_posts/js-data-structures-binary-search-tree.md create mode 100644 blog_posts/js-data-structures-binary-tree.md create mode 100644 blog_posts/js-data-structures-doubly-linked-list.md create mode 100644 blog_posts/js-data-structures-graph.md create mode 100644 blog_posts/js-data-structures-linked-list.md create mode 100644 blog_posts/js-data-structures-queue.md create mode 100644 blog_posts/js-data-structures-stack.md create mode 100644 blog_posts/js-data-structures-tree.md diff --git a/blog_images/ds-binary-search-tree.png b/blog_images/ds-binary-search-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..c9dff8117e0b88134971c52f337b794fff3ead4c GIT binary patch literal 38256 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 literal 0 HcmV?d00001 diff --git a/blog_images/ds-doubly-linked-list.png b/blog_images/ds-doubly-linked-list.png new file mode 100644 index 0000000000000000000000000000000000000000..fddedee0b863736ab1177a107711c00522b7abe5 GIT binary patch literal 22074 zcmeFYg!1JxNFhkk`SywDef-CN}+gh2oy?y;O%t(!6AO9@8r{@)VIB>Mmtix=1l1}1mcLv+B{|-4^AEN(BIL{xD5d2Rp zpmLY{e;5A-10MWOq|L}jJHjy~v|D<56E?nIIiO&K5f0O_J zT;lu{|NH*WTS`>B1n8!w<+v3pV2;|)9dOA%2^ShRv_~b}{-Jag6I;H3euM+h5_-1( zJb|oi$|1+moV=YkxATh&P7?*-JuzZ>z<=xN(!wQKp!YDta}-5=eiE6_Fvm;NK<}aj zE8O^8>2en5+dd20p!KE3NmCIa>Hk8BR+wFL?YylIBO#!^o5CsAIa31NoH$lQNc1Ks z%8`7LrT|0NLMgLyoMQa^TzXtVvN<_D=$b_|mpEFo47#$5I<5^}?y3@bQt2$a+x z!o`k)b}cyguWl?rP=pV>SCMq!*0NPUaQWQ7286km{Rywy6!!9nlDX5_c@92k%Cn23 zldu|*LBfVv7(TbQtVe&$LLfVpGvRy~>;Fa-9N<6fgck1)&hehf%#D?kAF8Mha;wpL zg_KW_mJb;=c5Ru)aj)~RpidwLS=4if@szdRZW~M4o)6i}{8IBJk$?P7N=$;TIM@t* zmhQ!A+V+2T?fpGfRYU`!t*tFMJ5#{;QeO1IBN0c4IOCcPUf9?R6`eVc8m?*({L_4? zHqGT1zWZOtQW8woldb>FfC0tSY%;Mt$&*yiRqt8T<<%5I+%=m=BvGL}(7P^t*Inl4 z#oQb$XD5+Bfoug>{bkO3Hg0t;gj$0KrzTse)HSG+zJ7p4Pb8Y@f^;YO-ZZ#Zo0|YeYc~Z zBSkqAdX3bK+VncsZE1PfxzI9~NaiFa1<#b6Gl|o#iV@bw5N|izB^-clv8%gBGZSvV zQY@4IifgyS_F~lT4UTx`j}ct|KjcCE>fJ*5)T8JuJ-Mh*Qv(Gdh?=fX+E1Crb6i83mdDr%th3^&psN{<$9ZS=GE;3qG`d@hH{E zG+?h{%0;CRv@HZQ9yY0st1Cbq76=E7{@+ePLecm=)XYJh4;b?qb%{8(8@TI4NC6C= zy6c8G`d!x|HWL7U#W&p(1es?1L!L?i(@n3EK4|>NC8zsuuJG~E3LDR{X79UPMy&q8 zy$%Pz_aZuUqG&-*U;rjFlWrF4AEJ%vo6HxOH96l|Zs|{K!P@D68!QeT_hFaEA3PrG zIk}fBgby@DNt_AwKXp-_Vyz!$0`|^7!mb`8(TBs!8rW4tu`u+4()8lIo5_qZHPo_x0J3*98G2L-OPZxb(le6!W2_)zxqlp|?Tdb63O)Pce)Hb9-ij!S z_SJ4)$!>Y$(0A||LQ&>^ma-*~V{t9)q6!Rs#Z?KIAh7PAHI(l08F6H5A328XKINAh zPGpI%Qh4l=Jwfvt6Ub{@$yo&Y`>@EvxR>ZjMe&hjmAhwNSmSVl4!_sZ(vGaxaV<;9)J8sn9@+~S zwoOc47@v^FrdB<=SR7-1kPkqt&N1NgVbJsuTmaJuQKk#V^5n# z5BCwJhMkTsp*|@uP*3cMQ+xHbZmwh-l#&M5s_zFoIJ!bl)3u$gN5?fAVwZT`@>9mg zAiPaN33IwpN1RpO#~-p=oO3rSp`)#%;JtOhQgwl#7#(9R?9Hy^Evl(^#WrjvX&!=U zrN(_JC9YSKs!bR_{}0Va!Y327JWlRU9p;)Rm`WWVPc~t0S_@rDlhbcHLhv7mTC?E4 zWDgZxp;8g4nUh2}sl%H9FbBaAa%ApVKz6V9n>hZ&ydMHtnXmj$n$Bfm*7=GoX{X-5 z>ZDiMOBxpYZ;O}yUOA>7;3_)9Wb*1!Vu>h`4vOUD+Sp#%zNC7F1Dkisbjw4tXj)sK z_1WF;VK=3{i5kv#wyljADb+>{lj+Or*^yPH&a&}7VQ*z|xo#bPQd*6kwkn+C!?A+) zTvWIJ$#+622M=H0>n>qusWv=J9*w$VDw|7FJ>YiD;8y(edUzAafi11Xn?l0cxIk9H z>Q0e1z9x1rR88O|0wp>Ie8vmBLI_MrZmW;pWxkQnsW*R2bh}o3NGg*yq%UBwgfcFb z!9A}_1SCm)$#&WR!{ji*@gE|*+*Alv6em~p#kfC(k>YHw>d{HQIs4p?lb-=1(z2^* zFk||qtRjll2)Y%oWe2t);pbj&WAREwkB$=RW6^JwCxNG&f$8H=_ZzoFyn0hDIT`R*o z{%lah#Xc##S)5`sbo(oj2qnN!Av^J^8$#v18-Kc}Ak(*T0dr?7_5pbAK8i_*KXosY zkr7 zwdOHjD|2(B2;m}&M9+m|XR8g;!tJ(B&QIwShdZ!bw_J@-erRQCQby-PVyS4J^xfs- zhA|`Xz*>zXhod3!Xz9u`A$ibu(F5?{td`LA^-PTpW7#Y>&nv}>0+@K`fjaC*+CY)!XV$4I^!zjK8VQi(V4+J|$Z+tcvVJfLq~h}s z;dIVSQbaf;mhCe!=zgp!1U*M51;gBc)k~U#2*ziI2Vz~3D2P9w&630-s(U;ke%NuI zz3!cbq>=<9sE@G2R1Mdq5Qi;9%KHkLR67orGvr+nrG9lC7r2YxQ>(pe93n+k-!N5BbUmxe)TPnD@;wm)-pRR`bF&4Av`6%uUr# zsEfmn1YV$}-?jlJYf{%$(mR#$Y#v|ycz@qHGA>UlC1puNS#PV3@8*eAQ`exck$sY` zzcPuJ@12gzLl^|i?mkth;Nfz~6SazemhI>sP*g5+o^dQ>6Gd?vdQ6SJomr}U-N(2f`bcrZl{xT5>m?}k zA(GGI?Vt>vbJRhF3%hmMwgy57e-9m+p2(yt%VUJ|9D#?MEl>z}_Lzkzsyr%PQ`{Dg z;nf;>LXProG#L#ht{q=PLF<^8JeRJ$E++UWJ>8lkf}NxDV;Rz!xVYF|Y`WT?IG;Mg zbgYDkd9xdgtRlRWbMZ=L(Nma*2Q2m0eZ30|cb@zagmh1#K`FjIywQZBVY59*vG+bR zp58=Nhj8Ohy7ahpHj~|mqPA++=;5iW#a>90+<`_dyeh&4Q9TNde5CR(-QsjBERdoZ z)u~rFj?V>BUZe_pmOW4d_WtQ|=AxE7;@46O3@R_fCGS$ZNclb3Sc8;fAQxv8oi10d zFML>9$fvP}*U^EvY`8eNJ%8URlP~^!TDTd>A*6FY7`4rKAY?Am?PKwZhKV$&A#g;r zpZ>kH;>8Y~!JggLGBK0hy z@LBZ`s&+!K^1uz*U+uQC>&fB!QJ3pk(L5sVOt)plWta+#`1w@oPDmmLhX0sYff;<1*iT{E% z=NZEmZ*_IaNP_k2O^;g{YW_z76wWH~DY@IZ`C=Wv%$aaRVS7t?w$ur)6 zEyTK%EeJg5Den-w0hrd%=xvUb){y(q)n*!Q)o_txXNRDS6!25hS z2XL+|H3WigIf!ScxY5nwme97l~@mb)Tp1N|^dAiMAcF2+{|KKV=j46}w*c_(~=l@d&?9AD3_Vx80E-wrER*oykoPSwqp8=CT zhI(VHKu1m(N7wdK>+K$3=fINx4kW9k1<@IJMNeukXHasGZaEybimPHn_}0l4iV~`@ z6|MB_EtHm?lX)YV<&S_7@w&XbOx+QAP(KMw%YEiahVSPJWwv8QFoogy1tfI*=5wPG`<_~`-YIfb)lwp)`rx*tx z&q>HSF;DrJj&8nMXv!{cKCD|6Ge@66Gbfe;5z@Jqj$tNnL4HMgg?#h7q)Ddy+o7Ey zxH)?Nm3P#Z#ON*S`J^nkvDKBgrRL_2rP3kz9CwBlj{B8116=lE=EZe>Lyp-?pZ)Sx z=j{lZoADy8RUwMA+`=|Qr+sx;%St=y2qEhEU4k)sge>e>H(|;or8G&R=9de(5X9@ zx^AijeUOn2XMa^Dc>qpz;PQ*@mQmDSoe_Nb#mOKnZc$;Ud1Ikg_Rt29U&bJr%hWVG zNkn24*e8_NYCi;Bxj*BRT}%n5(@TmM7{NcSiIi?gj)n6Ee$AvEt|5gH46^_$xU_Rg ztJpUgz4BW&6%|JIKYZ+v*#~h0Ztc8yX>DzLH4e)E5e+eIC&bsH-Yth`h8qN4*cUHU zwHK4FMxClwbWHtn8fSX857}pTj`Xij43Y3ZONLCD_%2Hg)2^IE?gx0tI7p+U&WC`) zB@(RmMNIN%_A8EmQ?kk1oxvLYw~W@7m7h5!5bY~-9H#oGqnLZr2$Ui zSk%td>}~>MIUl#nV!|9qqg%D zAm0ribKZ(aNftMNw4Yk-CBzKfG7oAb3Yuic5Xs}#XdETGOs-nD)=DWsa5+?Kx&mw@ z7@0%`ry=QKqfNPK!(aC6fA@iBO|QK+q-0LNLJmLOl}|-~H%!rG57Vvq`;tApF<v1oK26HI#Ysw0y&D85HGJAgX7iqB9< zUK2lcm%ccvDJ5}%y5d~5KXRrifuZ1R$eYnr?}=LClOq~W?}4QfgDHF-rsP-bEW4}Y zFWo>+Hjd(gj22NM^iOv{UJ#L>%%>3Zw|gm_Uuc@_xRZ4J=WVM=BnfrVQ~qPnYbfT9 zm**8RNwofw&tggGbJ-Js>;gDKB;!p0Tej}aJYTH7I3t=-mt@%BY{b`W@oj12uxH-+ zx4~P403YNQfv?Gy9$Qg$2iFwUlwB5+`JrCj0ASu?;f5T378>Z+{7wb{scpm)*TFv} zkcN8o!_BUec8eeCYw9Lb41G?oOjA zbkkUvQ%y|VYuUlqFd*}!OxQ&^waPi$y>(h9%699IBv1fr4MHO~c^1?IeG~58iadU` zcXrzrLl?`6;8i-oXNvIBWboPVYVh(@42Yr1bcV7W=TayG_Z@Zm($h4)>iyX0<RicVSlg-JT)c%r*aPI2m5? zKah$<*EozHunv6r>x(w-DLZ3$_4gGMt@TKu3vy3u_0!5pMAL^NMGl;+r5&_x&3%%Z z*^I^~-JOgCbmtWU_td3hLSD<=-Jt&AHv*}sW4^SNvBh^ZUY;j>~?fX%Qw~J6zhQ#I6r20Ds`DCU@PG$9ee6Rvl%S8F1@|1<3nB7ezoZ(x8+3Nk2WC zY(bkA%}*K^N;XvUB=&#mR=3cL>B+BICVy4S%N$;$QoNe3bfkl|&M_(t-JZZQr#C>& z7TJ?b)j^lQEbJagp-28cm+6R{#?zqUd|`ERxhiI|y7#0}&~rY(^ECS7{pj(zi(BAF z%C6$Cs(E))`GWR&w;3ONQqopG!=PE$9SA_!0j~~IHH=tQ1+4f<(M6lx0j8S<#w7eQ zHTZyt`Q&&^o9xEBR#5d&v4q~)CqZcXh2o?Y6sN2S$&$r-WEfoj=nb0HZH5Rc<);46F)0XX58Z$gR?!P|IssDtT4!;^9 zeH=c`4-Sm(JUZflTZyWejd?cf48{`UEDv0F0tCB?bse9GBB^KX8Xz%XtjedQB)uyL=_EiIne$@mUY8CH1oed0{Rt6d|3@Q zV-m;(|K23fy596#49Nb1Ud~{wM_!-fUkfsww+|L739bN=Xq*_+o#J4ELtfqwH2{H)G`G7`=N>xIP&Q|%fgO~>_0vQ^If#`f0UbVk2SKOK zVRNPle<0{i6DpxH=iWgvq&K>8#^TuCDeGf=f~Wt*?qt~3#YjBsKh?I=X zYQ|%iX5Lq2KlmZ66)1G&WR7G{9SZKr2j6Tv6^(?7>?n?f(jHk&A}^oqTjx#Zoili{ zuoC^;b#toj{_)OM;s>JO)Iyl^QL3#@S127t049N+^bZqk>kJMF9OdYk8j^>sa#DG5 z7*N_#ZUfb3SnBCr{WUVpk8*+UHEP2rDkwX4{g-!Ytw|3*3WOU@(b&@%vA$~Bvu8QzP!i2JK39U01;BdnQ#m+6E{=wZY`quKgKA%vKQR&Z8aFcWti zw!CXNm1On27O^^RnHLBseCMvgL;~e4_tRUqBLq1|K;==Qv|;`-1zgS#OkV_8CTtf>G~V zghOqo>V2$6@Ts4Oc(EBNcL4)4SkId{FXJ)wQ0@%ZumYPS>Sziaz^^Y`;H~75!~d5A?wi zql}l#eJ$%g4pr-)rnp|!3SFtf37{}a``Jr0=IQ%C zS3yHg_t)uE9pP3;yf+Z(0789PyuZ}sONLuvvE6LFi<$ZITS}&x&&n?Ro0A9As_3S- zVp;0jF{oKzG7pKg&39S>>qI0`9r;0cz2Kc%v_W1D<=-htz zb_ZHeVQ29DT;TfoN_NsELjqdQ_<;For`#Dh-BB)~Zp@CAX-AQSdr{QmuG@W^hPrzx z2*w}7J?xnXpQbRo_|3opXr$W-t2r7<2XwGx>;%F3;@*MSUyQ)65?ZZf=$~|tc#+elh(4upnmVI!qd>Yi)cY3@6OvGA|AM% z(-o|4;orwjk23%9Z$WSq_wFadJWWfVJ_T!er68*kghu>|4F%^BxL>(wjFkk6xzq5e zvx;ADPF2JQE?Kue58%9?693rR9=G`M!E5Q(BPUwb=QB_bYpHycXP`Bz3R##DC0mCNV3xW*3t6*Py z`vf{^b#*W*V?uDU(vo#LtbN1 zzy0x{iFGq&-^u%2J}J!&)i>-}vx`=$&fz~+2h!lHEE4^?`q_{fn+q`E}u?>SO| zoiLkH*PSo|*qr;0r>2LXO|5QiiPHQh7NYmfy3r_}(99auMz~*au>kssfrxT>J17Ay zd(<%5ZhLUSXVhR!>)Y(|$9PUDX6S5Q0C5%`VYQfbdq-*!*Z<1g(!wIIal9Z#3E1rO}2_vbRK&z2!FPG_}yk_ zjXX`oV4k3{va74up3YZ>_gBzKLC2SuKrChCTSd#ZQ_b?^*$&YccVj6y8Bvr*?e#Si zsl>2}Utwx|#INhz_@vD}4wtl!l=D{8yvxcme1xAt8RS2}?4^NdewE{U6dAnEi5l)g zF7<)xhS@}dB7;Ht#~jDO_SS@&`R^Z;k98S0{_>%D&LhO`EqB7TDZ|Ltpjt|L#H(SBRBp>Q+*>6 zJM2T3v)5=dWoUjDZ#@t85el17G(SQ^-3#7ZbH^&&K3Wt>f@u<6HW_q;tud=eO! zfos0MQZ`x`i|fdI(A64l$X+IU)x>Y)Q;C;$BYG}%d^6i2H~wUpSPb;iK-p(tam7cY zDK96X-I0l}Ni&`qTjG5vaF|g`RWV4E|w9fI&t~I^yw?*Jf z%9OVY;j+kjuF&gv9rKGVK1^FvW$~#$qQf^kH&=1xCHraSL2puY9g|vk=$elbcfdA& z_uiVbI9~5?@Y@sIiMF=$SlmKtW`_te>O`y^m-#Ymjx7%D6;5WWi|m9wEC{y@xH0QMg#pP%h*?c=y31Bt&DE~bIn;RFwM%7E_(BB9mZE7|8 zHB7_y(%%@#M0K`njO2YJB}O{GmBzI5F&1~e&88P9gA{gtshgX)Wt6%9=b`tzZ&PvR z26^)vbN(#tK3wyYAu?>!idHClTwq7!HOganT zoae5~zK~z2SfRWd3z@ft&9e|>u_4N}Py-`f#a?11lSfnbHZd|+wefp&@dlE)W*iMJ zX7}qmN8UurZJG*J@Fm?{vcjXM>7-&x968inpiG^2x+C}le-wdtN6QA;-Zz`J;L_RDS)ATDJ)x=k&|AteCT{6P^sqFk~GkP^4E8WbwU4( zs5!@*y_4DY?HAksNM)s4mXDes0heG-GAmaLRp*p_{Gc^u4Z{AGD2A*?blC=+eA=h$WB6pDO1<#X8Hz(!fr9R0FDzG?3srwvlws?5ryBLvn<0(@TU9mKlTg{kbV zh5_$~@raW7fUXIj4d6$50k7OT-fJP$?w(cpU*cc#r4YAZgG$HQW`BKL5AskeB*O-j4xtugoF!tB!6n zfdy#ESRfz(E9#XS&bbb0KB$y)L`du0Q;Q)zWHVcfg>UAGUyF7MYvggkuF8k+A zj~B0b5vP3Xc+w{)lrbjf`E!=_kci@91%EKWxs5@LGFrD||3f-k>3GVN-FReNVyxG- zV4c*Wa63LOClDo^)d8A=2HvQ%ZP86y=A8c%WJGz`$caX7ZeYD-$@W(*(ETSvaSb6c z-cJ+2AfHO(i9rG}jmh@;sWLr9)F8Dz$al7BZb03^*}w(-ByknGOMT@clwx?D=4V)U zYX)#1YsOX{TOIv=ox9afNl?GX(It{()I4=^vb}w1zT%^II+DvQOOWtD{CcSj@pj0} zqH{w^6G5b&X{ws8+@xXT=KI5e0dqs?g3a}8}uEdKV}XsR`j;DX?RTH&zgQy z15z`BZPQxl4!z}b9_KrU-kNdscRjIkU1Htc3d7QK#C;A8u5*rL|IE$?L3Kk^g1^+r z6Y9T`w1pzRhg&^3?nu`y06+ZGO&i$y*G&juH42nuM9X!%ex>4$BI*}z7MoTD2%0MC zgl2f|ryE~7us$CHW-F4Z(;O>H_Lk|y5Fo*rMI!2_W+QO4qO)V0sL{?_{CZsr>slCF{vvJeH!J2qA(hdpuIPkvY`AO zaJCm8?G;Uru)n%bm%)X}y6-^S8ErPt_KR^?pZQd4Z&=-FH?#2rKt-&X@>Avat8_w*_}52%uL z%^973ph&dwn-V z86neO;kL4UHydkXFlPYN<&&IS7#$XK4i6Uzu_U&0!j45bUR&gwt$A4LUE;vwb)onNDKWs~wwu%e;p1v6GdOmvN zbCqq*j0faQ4+Osmw{VEr;!YRX%dt{44WfewAW@N%n zMw8`mug7R#n4sCO9gAsvH~Sg3q8vgnEsABcjN}f*IqLkZ(;0fY$1!gUlGwD?GfA14 zfQQlPkrkzoQQEyTwx!>beb~|%##K!?&aza3OrNS$YXnX59fSv~hfq8m>$7b+a=ChT zN83B_s(X-{W0%?SXwW_QL?g^;*X8LyhStBVF_G@t?ZQ4WcVgf5CcA8d%ixMVL7g0> zG6WsQ*6RFuL>>YnmX3MtJLmuE+A3Jrlij%J_4)_Bgw2BC%R46$&D@49=(pTQ=%%x- zznNMl!8m=wCy$BJIqMxl9@H-|1XCHZ8k`EZ13zr-N${*co`C_Km{^w5{At_Z!M7q? zwFlv0lEgu!MatEP>j8SG5V6LE8|Cj_DY?e@$??-#O53lpJ2gb3SIR-R_;U|ke?-<> zlmH%_FGF^UOKot^1bFVK6r~kY$r&H9i_M3P^*ryyEb~D<#yJ-tzLehRgZ1NF#Ml?` z)oY$yu9wn-%Xo=?<-J%gXb*zk4f0wcQ#Cm~t5{B1^7{a-z1_MpbH8nrqqu*_kq^ucgn_Go?1LYTC}Nl@*+zgu4hE)|AQS&{N5Hn&Nq( z9t2w_$?w)-5+I17k;+Tl$gpkP;>5^^EIr?cpF?)mBzP|CaH4I?P zx~wlGdRm`4TQ6@c<4DN=$_VU#RZV_YE29ZH3H)hWzcWd1(c&yluuM&8LfG#-@ReK} z=isahK+2JLlp*MzD_HhE<<%kM!jI3+Sl09gES|cC0gER-75Be4E8A~YBlCF^WEd&p z11ekiCHomml;tIT?G6?AYWM^dRco$k{HdT;hCD5we#4_1zmR;_d}e2^776H}k2jfh z(C#BLr>u3GH41bu4}+l^zZiez>=C?nU85pSuV z_QU)FP~!pAfOPL9>&OP~sVgk8^uj|xVlAUC7|UdyTYKc@rqm88u^(A``^kmYc@h2< zxWtIfBPpmNkIV_om2#44o^UUK6CUAmijD-INED!mq7dN;59G=&GPy-+5*8e4>G_t1!y)-?2@m;xhv-leCiw z@g~h^f-prTn+or3VzXe@gstEc!7PK!hl>k`*uxFs%Y41;E5=MlJtp0Hy%N}N8}!`s z_tex}=WT%q#IQM6gn1X)ajhWZQ4r|03VsRftX-RRB_-$kok1b94O`!wk9|=WPy$JR zr&29@EX1gRJs)>2Hf|}`(^9-tF(y05<41Mrzg`%;#NV_gScLZbiik^mHWWnVAtNyD zyF#rZ!*K!?0?eqXKfC5U_}dddn%#4 ziAExhB){TI?{;sG6)FbyDb29b`EgA9ulE9${i0-a6|bG_OK<}2?(AimE#sdyUI_H< zHjY=7q$idlV>jz35D}nV_uGQ3ZFJrj&SQS$9M3W)##SMVIq?-Qp!PEt=qV@PG>b&x z*7YjHd{$mT22=^6lkyq50DSY+zt$RgpC0{u^b2oTBV_M$9eG?xQKS3%8$RIk7F4O5 zU+zV0`BXjA@eaZ(|w3>gBbgp%(oDEC%Cxt^i|kTUu}&f z_r6U=?#X8Niwt=7I((lUdhug%=B*1y^5!7X{f}g)n_ABlZ<)%vuf%LeO`qq<>>XN> z@G?+ooRt<24VRb?2JLoh67f9um;-qb`xV}kVV@)VUDso0vpZg{b;o7P64w7&SoB%5 zq>+%#o4F%A(Tu1DA?{dpf9PGK#X(zneZ!sNV6a=l)C3xJv@9gb#^br*P3zXeCxntT zYaF1p({(3v1i zb9b4MSPHC~9zcxNC z5~hokDK80?7ordlp)5_0qhf&`T!z4VdKS3d(zU(-H;Ow-STojsHyke>9oPu)Whh3k zrPE0oH^j!SFCx6?+A3w^mdoProAQR51C11sJK%z;vVWbLnx^J(uBQRgOo+@UHgmRD zD}$@w@twC7DSPyt$@MKRMrZ8sd}C9|kTRJJi<-Cg8b|r&-vYNs9M5bc5%&5aZMkb% zF*UNzt5!%#3=Q_pqJ7DSaRgDd@^~*hq%9xKa6YWKSOD8Pmc4hrZW2RAkLMzhxV+vRj4Ba7am(zT*k>CPyZT<1)9sD3#I|4E~%Za}TI+j^Pu5T7W*?-+E zTb7A`M5Y_cNOgXp^;rtpL|(e|P)A<*f9k8SOmxZSSyy5cV_2$>Z~EXLyQq|&Si^I* z=!2oPFJ83w=)VBNtH$xVR29de@gfZv1{u8QYsz~+pBz?Mc7)LVfzzCXiO=#tjDYC3 zP5A8nh;rW1_`{=tBluRB@<|KIGEs0l@BID<`od#TaDI(?G;N@4%KEjz->ptVRQ-WJ zMehpf>U`4m5Cb3>l*OXVAYDkkPW#o>usaY|> zL+@tI>O4&*9-yYLaERVmwXYH@<`|Lv$@7ZlrV;&n9#!UqsSPYJwZ6&rr$rFQHve;q z$*17@nEU>^7uSt+Bke#rf}>WpmjcXXqJkdl?1kST_%pD6;%eXKJ%jQU=f42^ zD9Ny-i(=r9^H_C;u7ti4zU0r+Njr?{Jk24!Lugy~uE@ z=(5)Qs{UoBdd$2C7O-Q?-35x3{X4Z5|JxV);Ffl|po_k+a$VI;6STo=+Z=xOPm1y0 zGkqXNn8LfH!u!v^j>$aZn;h%K0g`veaN8s|I6KKMDQ)^Zx^ow=-cvi)UOoKirTF*E zY|EXVWwFjBM27FjI*TwW*Fa-4i}*5W*x8Z!UG?k!dc*3m^m(JSX)6Y;1erLQ27FO8ec|D)Ty)hV^M;Y)<+QO^b966D5J4S zbqvxxg|PsAWN8c6@h(37S~%UEWqUEc)Jy;WwR7(8Ofc>r@8Bt(94e`ti;!~47$GZ_ zLk@)w4xt$t5;o_<)>A#!Qy4iP<`9uE=gshJi8c&#%Gj{5Qkb(j%(icz?{$6tiSPCO z?f&(??)!)Pe!t(>E93q+c2kgPNzj#_befg-b2^l`>WdNv-REu0t=DKLK3;=w^8&X_ z60K!RsP-Uh{WdI_HzH2GqmyXN+6$SryN=@_T(>~H>WP#UE)bDd*~I7V4hFLXmwEe# zlVWsOA5y4&w@_VyQWB`K<&R?H$y-^trx+IZx0K1N|GfEp6fqe(NuV|%`9`W)1%7O?sq^(Um&4OnY-NuEUFsMr{u5un3Y_)RfRB;}70-DgJDDVR zmZJZAtJ2;~jdb7SR^U=Lg9Pb%gbHq>_(G~18X7ti+EY-`PK z>5JbXd><-?QvlwD(M;s60t-SP;W4B!FsXZgwk=G?yOav6DRAf)?{Ymh=C8!p#(xZ)zhw{H z&`YZDy~d7w+H6{4HZk?|LH!`gpQZlMdQ$5;&-S?GsjPCrWrHUeSB!>%{@z@vM@<`r zq0eb1>f?AY!t~s#ANcKfP3`)sOq;Ue`mzK~X$|LHb7e7czJnws5-g06*RgH+>wRQC zSZu0|Q)ntq-lkniH`QTcC%ae^A|#e)d6>D+z-RsyQk?kVyq4;ht0l5tWcNAZ`t8dr z%^<5Q9M+ONeHA#b{avFo_sNjVugsW~ z)`YG@u<$thx zVS$jlR)J&CF-vB)-*f$^$Cw6fZO5xJl{nDoC3QDTsaX~rC zgn;9ekS)y#Eq*V=HKPTZG){{n_>q|wy?U^%FY}mUKgTjY&%_2H+0G=f$k#iDs%M8? zcuY2Cxc4jNe22K6QI11%_-Gvv7rY(;PB&l1(I2Rdx#ZPQ&uXHq(6)uT}Zo z8ls2?Nov5?@xl;Ant?H)kq;srB6->TawM9!-Pe5ZHB!CEd$b@S%jmp>tK6_|8t+E| z<0-usf_g#l?HMW<)_GH2%%9CGO2&&JvPkhyTEphuHNIY(r?Z0wM>01D2J{s>nBvDW z2TN(na=XO}#yJ^lGUgBjtBJ#oJYTN6(MGjhyCp;ME z3p|zDN-7msewJhxC&$QH$WCwB%IO)(N!2-M8c6zRoQfsU8tEV}9-iXqrPMJu9<_B3 zgw?ew_Vj%2JhP=;vB@+Q8mtvjM_VXaF~df3@h^-F5Peslz43xizI2!ehIgqyVJH(= zKnJT(zq<|8vEykSAwsEVkh@|hPhHrxK9WuB|I;+mtm+e%R$H%NWthr1IMb$4>4U4b&=J!9sLES;}9qr~HYKk`26(NU6$UBbRPuChC@^M5<& zyL4v9RmwlaP3@cHw2=q^8UpMA2K^vHPU}C-ucwvV+sd$f-`2EnzAWgb|9bxWCXS10&y<(1RcPuxd^{PuyOnF6^68R2F*FkAk!+1{t69;2RQc>1s`$S|0If{Q=E2 zUag8#b9F7?d2ZnmDeF#zt+2ZUQ{UGdaXPDsAscA7%B3MmNZrPtg0a{}8=f+J@$C2; zFQdX7&E)vk3oXew%3#EOd>{&F+6S{#X#rr(I%i z3ioaN4&JTFpr7asMHvK$s3(T4C3Kpm0P8UxI2W&q&Seb5gp#~prX|6wVgpRz#VWhv9#e0v5m&Dgxqtx4zsE<@|i zNwy%dXFC|;jha_f%nN6yv1hA@T~fOS1$NE+r0Fet+>1u(`f9Fnp|@L4tyy94ZNtS0 zGL)7lbcoL@<}C!jSv=h3J97HyREV!?KV+;Z^Yz(`V<}B$~V< zkI_Ip6Wo^HgZt)V8JqA6P9GF}HDf4e)e7xhmWAyjHRHzVqR3luHvzr09 zNL}M)wUFiJUkGQr1UKP!o3kTh0u6dJHX$RqUFpJj%fiCQXcP6XSl$}jr9>imse(#_vObKV__@~V}E##M&V&NomDrwhF zOkQnvZX})1X0Ivx4T)MSu^MfJK)W2YCdw~a_7#cGGJG3M9%v_KIsb~=pbRV(?p4+B zQIuJFk*v}5Ca@=lnaubZeXfZiF}v|9U4o}OQqqJ+#`dQF^>GpY~j5dcs2reo!?z_c@Go)7g`;@n%=+{3^T)qO)IHg`GmS_#JD7 zy>LN2Mdvv&axZ~NO#Td}<#%e5J9&AdeWo5VD4ze@>^)BgGKbhEXPd<3zOGPD_KH5V z`n7ZxX>JP@=7v7H+vwDYNKL%&Mo3wc7GSfh=+6uSoH!n?khm+yBRd0vgrnBtHEQV^ znrO?f#aw{SsWmxce~d>#Xp3DdH2SvPiYtVdrw>4p?v6qN1@}vf@s)`vi!5q zD$cW`|JEAW_??wpR>7H1 z_+oXWM9evKA?uvPONNQ4(w7b9qzT=B87;WK?Z!ZE_d2h2sg8C{{zZw4GH zIw?D-FTF!Ao6MTtT*o1$&y?TeZa%c@cc$yb3EAO)(|sgG2|?;l=0NxpoJQyurh>42jnyA-YXdO zfYP>4`292Cq%^*aue|+_3&x1cKeQ;SKKUaMDkOLLEt%ek8z7{E<9AF#_={4RSm^?_ z*HSG;>H>iG?&##!HsU*jeQN{KoYsKV!ua>E7%zxiXfBx0& zYTB6BLMO8e#xdSgh(i)Rm&!c~w`Ckvi^Xv6y0dqcmf~FEI^fbJ-its6AZvjQvw!Ne z&?I`#&b;Y%P@XXXkG+50yDMq{_dR6rPv#Bjomeba8UBjFt}8=C4AoX$f&F@X;7?g( zFwDn0nM=bDvmMgV(>GOFP#=9L{lHqQD4cj}Coc?#MNYsj`I$DlF3bR0= zFK_VRN`~|=wr?fw7^Rt<0XH%)phB1o-za%{xuUaC#@vP)@ZaKFjnYF5~Z3Jnn-LE&ymtobJuRKZ)%0ff-z~D{dL_4LQnLc zjgaI}prkhwKUf)l!X3NU>kAJ$9{tu=1eP<_|azLms);p`tEWLh+RPHtf=vHALx2qnEij7xbYeV`0n zDfvp_s&>|UTiws`sQzL_D?}FktRGwyeay7LCZFyjEx!?2-?+Ltm8iHRe^I!A2c%sp z>nKoJV+XTh6rX!U4A|g>z(CUbCS*|F7@@g1y1wfVTEfv^T+rmd*$w>ieqCFiy|pj3 z`d}f`24a`MVbMypoA}aZr%U`k%Z2k+jH}-%XWhe!W!|j2_Vc>L-o%iP?i;{29$sobUe(NbaxH>M4^LmU3bN>yG ziaS{a-jS3q#%>t;PUkDg9(&EXco-T`S|TmjF;uH{DCPM$i%ee${3`BtVJOGKvfg`8 zg&4n7=R242wj!ieooBX}tx>Y7*Z8!X1EL&#)qNx}0n7$?Iq_&ok5CI8xczb7l85|k zI9`vtP|0G1eej{*C{3vKng4La_U$VYz1Q|%8fFM=-+#;h2V?I0zf1%bfO4*OPQ5?a SUiY6Ju(|1Q18ec<`Tqc`KKiEs literal 0 HcmV?d00001 diff --git a/blog_images/ds-graph.png b/blog_images/ds-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..95c700b5f47f947a018bdfed5bff5a790d561c0f GIT binary patch literal 21884 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 Dv|$nc literal 0 HcmV?d00001 diff --git a/blog_images/ds-tree.png b/blog_images/ds-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b362ce0627414c61475e8b65808c2f77102951 GIT binary patch literal 24463 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 literal 0 HcmV?d00001 diff --git a/blog_posts/js-data-structures-binary-search-tree.md b/blog_posts/js-data-structures-binary-search-tree.md new file mode 100644 index 000000000..d362ea1f2 --- /dev/null +++ b/blog_posts/js-data-structures-binary-search-tree.md @@ -0,0 +1,217 @@ +--- +title: JavaScript Data Structures - Binary Search Tree +type: story +tags: javascript,object,class,array +authors: chalarangelo +cover: blog_images/purple-flower-macro-4.jpg +excerpt: A binary search tree is a data structure consisting of a set of ordered linked nodes representing a hierarchical tree structure, in which each node can have at most two children. +firstSeen: 2021-08-31T05:00:00-04:00 +--- + +### Definition + +A binary search tree is a data structure consisting of a set of orderd linked nodes that represent a hierarchical tree structure. Each node is linked to others via parent-children relationship. Any given node can have at most two children (left and right). The first node in the binary search tree is the root, whereas nodes without any children are the leaves. The binary search tree is organized in such a way that for any given node, all nodes in its left subtree have a key less than itself and all nodes in its right subtree have a key greater than itself. + +![JavaScript Binary Search Tree visualization](./blog_images/ds-binary-search-tree.png) + +Each node in a binary search tree data structure must have the following properties: + +- `key`: The key of the node +- `value`: The value of the node +- `parent`: The parent of the node (`null` if there is none) +- `left`: A pointer to the node's left child (`null` if there is none) +- `right`: A pointer to the node's right child (`null` if there is none) + +The main operations of a binary search tree data structure are: + +- `insert`: Inserts a node as a child of the given parent node +- `remove`: Removes a node and its children from the binary search tree +- `has`: Checks if a given node exists +- `find`: Retrieves a given node +- `preOrderTraversal`: Traverses the binary search tree by recursively traversing each node followed by its children +- `postOrderTraversal`: Traverses the binary search tree by recursively traversing each node's children followed by the node +- `inOrderTraversal`: Traverses the binary search tree by recursively traversing each node's left child, followed by the node, followed by its right child + +### Implementation + +```js +class BinarySearchTreeNode { + constructor(key, value = key, parent = null) { + this.key = key; + this.value = value; + this.parent = parent; + this.left = null; + this.right = null; + } + + get isLeaf() { + return this.left === null && this.right === null; + } + + get hasChildren() { + return !this.isLeaf; + } +} + +class BinarySearchTree { + constructor(key, value = key) { + this.root = new BinarySearchTreeNode(key, value); + } + + *inOrderTraversal(node = this.root) { + if (node.left) yield* this.inOrderTraversal(node.left); + yield node; + if (node.right) yield* this.inOrderTraversal(node.right); + } + + *postOrderTraversal(node = this.root) { + if (node.left) yield* this.postOrderTraversal(node.left); + if (node.right) yield* this.postOrderTraversal(node.right); + yield node; + } + + *preOrderTraversal(node = this.root) { + yield node; + if (node.left) yield* this.preOrderTraversal(node.left); + if (node.right) yield* this.preOrderTraversal(node.right); + } + + insert(key, value = key) { + let node = this.root; + while (true) { + if (node.key === key) return false; + if (node.key > key) { + if (node.left !== null) node = node.left; + else { + node.left = new BinarySearchTreeNode(key, value, node); + return true; + } + } else if (node.key < key) { + if (node.right !== null) node = node.right; + else { + node.right = new BinarySearchTreeNode(key, value, node); + return true; + } + } + } + } + + has(key) { + for (let node of this.postOrderTraversal()) { + if (node.key === key) return true; + } + return false; + } + + find(key) { + for (let node of this.postOrderTraversal()) { + if (node.key === key) return node; + } + return undefined; + } + + remove(key) { + const node = this.find(key); + if (!node) return false; + const isRoot = node.parent === null; + const isLeftChild = !isRoot ? node.parent.left === node : false; + const hasBothChildren = node.left !== null && node.right !== null; + + if (node.isLeaf) { + if (!isRoot) { + if (isLeftChild) node.parent.left = null; + else node.parent.right = null; + } else { + this.root = null; + } + return true; + } else if (!hasBothChildren) { + const child = node.left !== null ? node.left : node.right; + if (!isRoot) { + if (isLeftChild) node.parent.left = child; + else node.parent.right = child; + } else { + this.root = child; + } + child.parent = node.parent; + return true; + } else { + const rightmostLeft = [...this.inOrderTraversal(node.left)].slice(-1)[0]; + rightmostLeft.parent = node.parent; + if (!isRoot) { + if (isLeftChild) node.parent.left = rightmostLeft; + else node.parent.right = rightmostLeft; + } else { + this.root = rightmostLeft; + } + rightmostLeft.right = node.right; + node.right.parent = rightmostLeft; + return true; + } + } +} +``` + +- Create a `class` for the `BinarySearchTreeNode` with a `constructor` that initializes the appropriate `key`, `value`, `parent`, `left` and `right` properties. +- Define an `isLeaf` getter, that uses `Array.prototype.length` to check if both `left` and `right` are empty. +- Define a `hasChildren` getter, that is the reverse of the `isLeaf` getter. +- Create a `class` for the `BinarySearchTree` with a `constructor` that initializes the `root` of the binary search tree. +- Define a `preOrderTraversal()` generator method that traverses the binary search tree in pre-order, using the `yield*` syntax to recursively delegate traversal to itself. +- Define a `postOrderTraversal()` generator method that traverses the binary search tree in post-order, using the `yield*` syntax to recursively delegate traversal to itself. +- Define a `inOrderTraversal()` generator method that traverses the binary search tree in in-order, using the `yield*` syntax to recursively delegate traversal to itself. +- Define an `insert()` method, that uses a `while` loop to search the binary search tree, moving through each node's children, until an appropriate position is found to insert a new child `BinarySearchTreeNode` either as the `left` or `right` child, depending on the given `key`. +- Define a `has()` method, that uses the `preOrderTraversal()` method to check if the given node exists in the binary search tree. +- Define a `find()` method, that uses the `preOrderTraversal()` method to retrieve the given node in the binary search tree. +- Define a `remove()` method, that removes the given `BinarySearchTreeNode` from the binary search tree, deleting any links to it and updating the binary search tree to retain its order. + +```js + +const tree = new BinarySearchTree(30); + +tree.insert(10); +tree.insert(15); +tree.insert(12); +tree.insert(40); +tree.insert(35); +tree.insert(50); + +[...tree.preOrderTraversal()].map(x => x.value); +// [30, 10, 15, 12, 40, 35, 50] + +[...tree.inOrderTraversal()].map(x => x.value); +// [10, 12, 15, 30, 35, 40, 50] + +[...tree.postOrderTraversal()].map(x => x.value); +// [12, 15, 10, 35, 50, 40, 30] + +tree.root.value; // 30 +tree.root.hasChildren; // true + +tree.find(12).isLeaf; // true +tree.find(40).isLeaf; // false +tree.find(50).parent.value; // 40 +tree.find(15).left.value; // 12 +tree.find(12).right; // null + +tree.remove(12); + +[...tree.preOrderTraversal()].map(x => x.value); +// [30, 10, 15, 40, 35, 50] + +tree.remove(10); + +[...tree.preOrderTraversal()].map(v => ({ + key: v.key, + parent: v.parent ? v.parent.key : null, +})); // [30, 15, 40, 35, 50] + +tree.remove(40); + +[...tree.preOrderTraversal()].map(x => x.value); +// [30, 15, 40, 35, 50] + +tree.remove(30); + +[...tree.preOrderTraversal()].map(x => x.value); +// [15, 35, 50] +``` diff --git a/blog_posts/js-data-structures-binary-tree.md b/blog_posts/js-data-structures-binary-tree.md new file mode 100644 index 000000000..b6692a32a --- /dev/null +++ b/blog_posts/js-data-structures-binary-tree.md @@ -0,0 +1,162 @@ +--- +title: JavaScript Data Structures - Binary Tree +type: story +tags: javascript,object,class,array +authors: chalarangelo +cover: blog_images/purple-flower-macro-3.jpg +excerpt: A binary tree is a data structure consisting of a set of linked nodes representing a hierarchical tree structure, in which each node can have at most two children. +firstSeen: 2021-08-26T05:00:00-04:00 +--- + +### Definition + +A binary tree is a data structure consisting of a set of linked nodes that represent a hierarchical tree structure. Each node is linked to others via parent-children relationship. Any given node can have at most two children (left and right). The first node in the binary tree is the root, whereas nodes without any children are the leaves. + +![JavaScript Binary Tree visualization](./blog_images/ds-binary-tree.png) + +Each node in a binary tree data structure must have the following properties: + +- `key`: The key of the node +- `value`: The value of the node +- `parent`: The parent of the node (`null` if there is none) +- `left`: A pointer to the node's left child (`null` if there is none) +- `right`: A pointer to the node's right child (`null` if there is none) + +The main operations of a binary tree data structure are: + +- `insert`: Inserts a node as a child of the given parent node +- `remove`: Removes a node and its children from the binary tree +- `find`: Retrieves a given node +- `preOrderTraversal`: Traverses the binary tree by recursively traversing each node followed by its children +- `postOrderTraversal`: Traverses the binary tree by recursively traversing each node's children followed by the node +- `inOrderTraversal`: Traverses the binary tree by recursively traversing each node's left child, followed by the node, followed by its right child + +### Implementation + +```js +class BinaryTreeNode { + constructor(key, value = key, parent = null) { + this.key = key; + this.value = value; + this.parent = parent; + this.left = null; + this.right = null; + } + + get isLeaf() { + return this.left === null && this.right === null; + } + + get hasChildren() { + return !this.isLeaf; + } +} + +class BinaryTree { + constructor(key, value = key) { + this.root = new BinaryTreeNode(key, value); + } + + *inOrderTraversal(node = this.root) { + if (node.left) yield* this.inOrderTraversal(node.left); + yield node; + if (node.right) yield* this.inOrderTraversal(node.right); + } + + *postOrderTraversal(node = this.root) { + if (node.left) yield* this.postOrderTraversal(node.left); + if (node.right) yield* this.postOrderTraversal(node.right); + yield node; + } + + *preOrderTraversal(node = this.root) { + yield node; + if (node.left) yield* this.preOrderTraversal(node.left); + if (node.right) yield* this.preOrderTraversal(node.right); + } + + insert( + parentNodeKey, + key, + value = key, + { left, right } = { left: true, right: true } + ) { + for (let node of this.preOrderTraversal()) { + if (node.key === parentNodeKey) { + const canInsertLeft = left && node.left === null; + const canInsertRight = right && node.right === null; + if (!canInsertLeft && !canInsertRight) return false; + if (canInsertLeft) { + node.left = new BinaryTreeNode(key, value, node); + return true; + } + if (canInsertRight) { + node.right = new BinaryTreeNode(key, value, node); + return true; + } + } + } + return false; + } + + remove(key) { + for (let node of this.preOrderTraversal()) { + if (node.left.key === key) { + node.left = null; + return true; + } + if (node.right.key === key) { + node.right = null; + return true; + } + } + return false; + } + + find(key) { + for (let node of this.preOrderTraversal()) { + if (node.key === key) return node; + } + return undefined; + } +} +``` + +- Create a `class` for the `BinaryTreeNode` with a `constructor` that initializes the appropriate `key`, `value`, `parent`, `left` and `right` properties. +- Define an `isLeaf` getter, that uses `Array.prototype.length` to check if both `left` and `right` are empty. +- Define a `hasChildren` getter, that is the reverse of the `isLeaf` getter. +- Create a `class` for the `BinaryTree` with a `constructor` that initializes the `root` of the binary tree. +- Define a `preOrderTraversal()` generator method that traverses the binary tree in pre-order, using the `yield*` syntax to recursively delegate traversal to itself. +- Define a `postOrderTraversal()` generator method that traverses the binary tree in post-order, using the `yield*` syntax to recursively delegate traversal to itself. +- Define a `inOrderTraversal()` generator method that traverses the binary tree in in-order, using the `yield*` syntax to recursively delegate traversal to itself. +- Define an `insert()` method, that uses the `preOrderTraversal()` method to find the given parent node and insert a new child `BinaryTreeNode` either as the `left` or `right` child, depending on the passed options object. +- Define a `remove()` method, that uses the `preOrderTraversal()` method and `Array.prototype.filter()` to remove a `BinaryTreeNode` from the binary tree. +- Define a `find()` method, that uses the `preOrderTraversal()` method to retrieve the given node in the binary tree. + +```js +const tree = new BinaryTree(1, 'AB'); + +tree.insert(1, 11, 'AC'); +tree.insert(1, 12, 'BC'); +tree.insert(12, 121, 'BG', { right: true }); + +[...tree.preOrderTraversal()].map(x => x.value); +// ['AB', 'AC', 'BC', 'BCG'] + +[...tree.inOrderTraversal()].map(x => x.value); +// ['AC', 'AB', 'BC', 'BG'] + +tree.root.value; // 'AB' +tree.root.hasChildren; // true + +tree.find(12).isLeaf; // false +tree.find(121).isLeaf; // true +tree.find(121).parent.value; // 'BC' +tree.find(12).left; // null +tree.find(12).right.value; // 'BG' + +tree.remove(12); + +[...tree.postOrderTraversal()].map(x => x.value); +// ['AC', 'AB'] +``` diff --git a/blog_posts/js-data-structures-doubly-linked-list.md b/blog_posts/js-data-structures-doubly-linked-list.md new file mode 100644 index 000000000..830217466 --- /dev/null +++ b/blog_posts/js-data-structures-doubly-linked-list.md @@ -0,0 +1,146 @@ +--- +title: JavaScript Data Structures - Doubly Linked List +type: story +tags: javascript,object,class,array +authors: chalarangelo +cover: blog_images/purple-flower-macro-4.jpg +excerpt: A doubly linked list is a linear data structure where each element points both to the next and the previous one. +firstSeen: 2021-08-12T05:00:00-04:00 +--- + +### Definition + +A doubly linked list is a linear data structure that represents a collection of elements, where each element points both to the next and the previous one. The first element in the doubly linked list is the head and the last element is the tail. + +![JavaScript Doubly Linked List visualization](./blog_images/ds-doubly-linked-list.png) + +Each element of a doubly linked list data structure must have the following properties: + +- `value`: The value of the element +- `next`: A pointer to the next element in the linked list (`null` if there is none) +- `previous`: A pointer to the previous element in the linked list (`null` if there is none) + +The main properties of a doubly linked list data structure are: + +- `size`: The number of elements in the doubly linked list +- `head`: The first element in the doubly linked list +- `tail`: The last element in the doubly linked list + +The main operations of a doubly linked list data structure are: + +- `insertAt`: Inserts an element at the specific index +- `removeAt`: Removes the element at the specific index +- `getAt`: Retrieves the element at the specific index +- `clear`: Empties the doubly linked list +- `reverse`: Reverses the order of elements in the doulby linked list + +### Implementation + +```js +class DoublyLinkedList { + constructor() { + this.nodes = []; + } + + get size() { + return this.nodes.length; + } + + get head() { + return this.size ? this.nodes[0] : null; + } + + get tail() { + return this.size ? this.nodes[this.size - 1] : null; + } + + insertAt(index, value) { + const previousNode = this.nodes[index - 1] || null; + const nextNode = this.nodes[index] || null; + const node = { value, next: nextNode, previous: previousNode }; + + if (previousNode) previousNode.next = node; + if (nextNode) nextNode.previous = node; + this.nodes.splice(index, 0, node); + } + + insertFirst(value) { + this.insertAt(0, value); + } + + insertLast(value) { + this.insertAt(this.size, value); + } + + getAt(index) { + return this.nodes[index]; + } + + removeAt(index) { + const previousNode = this.nodes[index - 1] || null; + const nextNode = this.nodes[index + 1] || null; + + if (previousNode) previousNode.next = nextNode; + if (nextNode) nextNode.previous = previousNode; + + return this.nodes.splice(index, 1); + } + + clear() { + this.nodes = []; + } + + reverse() { + this.nodes = this.nodes.reduce((acc, { value }) => { + const nextNode = acc[0] || null; + const node = { value, next: nextNode, previous: null }; + if (nextNode) nextNode.previous = node; + return [node, ...acc]; + }, []); + } + + *[Symbol.iterator]() { + yield* this.nodes; + } +} +``` + +- Create a `class` with a `constructor` that initializes an empty array, `nodes`, for each instance. +- Define a `size` getter, that returns that uses `Array.prototype.length` to return the number of elements in the `nodes` array. +- Define a `head` getter, that returns the first element of the `nodes` array or `null` if empty. +- Define a `tail` getter, that returns the last element of the `nodes` array or `null` if empty. +- Define an `insertAt()` method, which uses `Array.prototype.splice()` to add a new object in the `nodes` array, updating the `next` and `previous` keys of the previous and next elements respectively. +- Define two convenience methods, `insertFirst()` and `insertLast()` that use the `insertAt()` method to insert a new element at the start or end of the `nodes` array respectively. +- Define a `getAt()` method, which retrieves the element in the given `index`. +- Define a `removeAt()` method, which uses `Array.prototype.splice()` to remove an object in the `nodes` array, updating the `next` and `previous` keys of the previous and next elements respectively. +- Define a `clear()` method, which empties the `nodes` array. +- Define a `reverse()` method, which uses `Array.prototype.reduce()` and the spread operator (`...`) to reverse the order of the `nodes` array, updating the `next` and `previous` keys of each element appropriately. +- Define a generator method for `Symbol.iterator`, which delegates to the `nodes` array's iterator using the `yield*` syntax. + +```js +const list = new DoublyLinkedList(); + +list.insertFirst(1); +list.insertFirst(2); +list.insertFirst(3); +list.insertLast(4); +list.insertAt(3, 5); + +list.size; // 5 +list.head.value; // 3 +list.head.next.value; // 2 +list.tail.value; // 4 +list.tail.previous.value; // 5 +[...list.map(e => e.value)]; // [3, 2, 1, 5, 4] + +list.removeAt(1); // 2 +list.getAt(1).value; // 1 +list.head.next.value; // 1 +[...list.map(e => e.value)]; // [3, 1, 5, 4] + +list.reverse(); +[...list.map(e => e.value)]; // [4, 5, 1, 3] + +list.clear(); +list.size; // 0 +``` diff --git a/blog_posts/js-data-structures-graph.md b/blog_posts/js-data-structures-graph.md new file mode 100644 index 000000000..c71658907 --- /dev/null +++ b/blog_posts/js-data-structures-graph.md @@ -0,0 +1,168 @@ +--- +title: JavaScript Data Structures - Graph +type: story +tags: javascript,object,class,array +authors: chalarangelo +cover: blog_images/purple-flower-macro-1.jpg +excerpt: A graph is a data structure consisting of a set of vertices connected by a set of edges. +firstSeen: 2021-08-17T05:00:00-04:00 +--- + +### Definition + +A graph is a data structure consisting of a set of nodes or vertices and a set of edges that represent connections between those nodes. Graphs can be directed or undirected, while their edges can be assigned numeric weights. + +![JavaScript Graph visualization](./blog_images/ds-graph.png) + +Each node in a graph data structure must have the following properties: + +- `key`: The key of the node +- `value`: The value of the node + +Each edge in a grpah data structure must have the following properties: + +- `a`: The starting node of the edge +- `b`: The target node of the edge +- `weight`: An optional numeric weight value for the edge + +The main operations of a graph data structure are: + +- `addNode`: Inserts a new node with the specific key and value +- `addEdge`: Inserts a new edge between two given nodes, optionally setting its weight +- `removeNode`: Removes the node with the specified key +- `removeEdge`: Removes the edge between two given nodes +- `findNode`: Retrieves the node with the given key +- `hasEdge`: Checks if the graph has an edge between two given nodes +- `setEdgeWeight`: Sets the weight of a given edge +- `getEdgeWeight`: Gets the weight of a given edge +- `adjacent`: Finds all nodes for which an edge exists from a given node +- `indegree`: Calculates the total number of edges to a given node +- `outdegree`: Calculates the total number of edges from a given node + +### Implementation + +```js +class Graph { + constructor(directed = true) { + this.directed = directed; + this.nodes = []; + this.edges = new Map(); + } + + addNode(key, value = key) { + this.nodes.push({ key, value }); + } + + addEdge(a, b, weight) { + this.edges.set(JSON.stringify([a, b]), { a, b, weight }); + if (!this.directed) + this.edges.set(JSON.stringify([b, a]), { a: b, b: a, weight }); + } + + removeNode(key) { + this.nodes = this.nodes.filter(n => n.key !== key); + [...this.edges.values()].forEach(({ a, b }) => { + if (a === key || b === key) this.edges.delete(JSON.stringify([a, b])); + }); + } + + removeEdge(a, b) { + this.edges.delete(JSON.stringify([a, b])); + if (!this.directed) this.edges.delete(JSON.stringify([b, a])); + } + + findNode(key) { + return this.nodes.find(x => x.key === key); + } + + hasEdge(a, b) { + return this.edges.has(JSON.stringify([a, b])); + } + + setEdgeWeight(a, b, weight) { + this.edges.set(JSON.stringify([a, b]), { a, b, weight }); + if (!this.directed) + this.edges.set(JSON.stringify([b, a]), { a: b, b: a, weight }); + } + + getEdgeWeight(a, b) { + return this.edges.get(JSON.stringify([a, b])).weight; + } + + adjacent(key) { + return [...this.edges.values()].reduce((acc, { a, b }) => { + if (a === key) acc.push(b); + return acc; + }, []); + } + + indegree(key) { + return [...this.edges.values()].reduce((acc, { a, b }) => { + if (b === key) acc++; + return acc; + }, 0); + } + + outdegree(key) { + return [...this.edges.values()].reduce((acc, { a, b }) => { + if (a === key) acc++; + return acc; + }, 0); + } +} +``` + +- Create a `class` with a `constructor` that initializes an empty array, `nodes`, and a `Map`, `edges`, for each instance. The optional argument, `directed`, specifies if the graph is directed or not. + +- Define an `addNode()` method, which uses `Array.prototype.push()` to add a new node in the `nodes` array. +- Define an `addEdge()` method, which uses `Map.prototype.set()` to add a new edge to the `edges` Map, using `JSON.stringify()` to produce a unique key. +- Define a `removeNode()` method, which uses `Array.prototype.filter()` and `Map.prototype.delete()` to remove the given node and any edges connected to it. +- Define a `removeEdge()` method, which uses `Map.prototype.delete()` to remove the given edge. +- Define a `findNode()` method, which uses `Array.prototype.find()` to return the given node, if any. +- Define a `hasEdge()` method, which uses `Map.prototype.has()` and `JSON.stringify()` to check if the given edge exists in the `edges` Map. +- Define a `setEdgeWeight()` method, which uses `Map.prototype.set()` to set the weight of the appropriate edge, whose key is produced by `JSON.stringify()`. +- Define a `getEdgeWeight()` method, which uses `Map.prototype.get()` to get the eight of the appropriate edge, whose key is produced by `JSON.stringify()`. +- Define an `adjacent()` method, which uses `Map.prototype.values()`, `Array.prototype.reduce()` and `Array.prototype.push()` to find all nodes connected to the given node. +- Define an `indegree()` method, which uses `Map.prototype.values()` and `Array.prototype.reduce()` to count the number of edges to the given node. +- Define an `outdegree()` method, which uses `Map.prototype.values()` and `Array.prototype.reduce()` to count the number of edges from the given node. + +```js + +const g = new Graph(); + +g.addNode('a'); +g.addNode('b'); +g.addNode('c'); +g.addNode('d'); + +g.addEdge('a', 'c'); +g.addEdge('b', 'c'); +g.addEdge('c', 'b'); +g.addEdge('d', 'a'); + +g.nodes.map(x => x.value); // ['a', 'b', 'c', 'd'] +[...g.edges.values()].map(({ a, b }) => `${a} => ${b}`); +// ['a => c', 'b => c', 'c => b', 'd => a'] + +g.adjacent('c'); // ['b'] + +g.indegree('c'); // 2 +g.outdegree('c'); // 1 + +g.hasEdge('d', 'a'); // true +g.hasEdge('a', 'd'); // false + +g.removeEdge('c', 'b'); + +[...g.edges.values()].map(({ a, b }) => `${a} => ${b}`); +// ['a => c', 'b => c', 'd => a'] + +g.removeNode('c'); + +g.nodes.map(x => x.value); // ['a', 'b', 'd'] +[...g.edges.values()].map(({ a, b }) => `${a} => ${b}`); +// ['d => a'] + +g.setEdgeWeight('d', 'a', 5); +g.getEdgeWeight('d', 'a'); // 5 +``` diff --git a/blog_posts/js-data-structures-linked-list.md b/blog_posts/js-data-structures-linked-list.md new file mode 100644 index 000000000..5cb0868d3 --- /dev/null +++ b/blog_posts/js-data-structures-linked-list.md @@ -0,0 +1,140 @@ +--- +title: JavaScript Data Structures - Linked List +type: story +tags: javascript,object,class,array +authors: chalarangelo +cover: blog_images/purple-flower-macro-3.jpg +excerpt: A linked list is a linear data structure where each element points to the next. +firstSeen: 2021-08-08T05:00:00-04:00 +--- + +### Definition + +A linked list is a linear data structure that represents a collection of elements, where each element points to the next one. The first element in the linked list is the head and the last element is the tail. + +![JavaScript Linked List visualization](./blog_images/ds-linked-list.png) + +Each element of a linked list data structure must have the following properties: + +- `value`: The value of the element +- `next`: A pointer to the next element in the linked list (`null` if there is none) + +The main properties of a linked list data structure are: + +- `size`: The number of elements in the linked list +- `head`: The first element in the linked list +- `tail`: The last element in the linked list + +The main operations of a linked list data structure are: + +- `insertAt`: Inserts an element at the specific index +- `removeAt`: Removes the element at the specific index +- `getAt`: Retrieves the element at the specific index +- `clear`: Empties the linked list +- `reverse`: Reverses the order of elements in the linked list + +### Implementation + +```js +class LinkedList { + constructor() { + this.nodes = []; + } + + get size() { + return this.nodes.length; + } + + get head() { + return this.size ? this.nodes[0] : null; + } + + get tail() { + return this.size ? this.nodes[this.size - 1] : null; + } + + insertAt(index, value) { + const previousNode = this.nodes[index - 1] || null; + const nextNode = this.nodes[index] || null; + const node = { value, next: nextNode }; + + if (previousNode) previousNode.next = node; + this.nodes.splice(index, 0, node); + } + + insertFirst(value) { + this.insertAt(0, value); + } + + insertLast(value) { + this.insertAt(this.size, value); + } + + getAt(index) { + return this.nodes[index]; + } + + removeAt(index) { + const previousNode = this.nodes[index - 1]; + const nextNode = this.nodes[index + 1] || null; + + if (previousNode) previousNode.next = nextNode; + + return this.nodes.splice(index, 1); + } + + clear() { + this.nodes = []; + } + + reverse() { + this.nodes = this.nodes.reduce( + (acc, { value }) => [{ value, next: acc[0] || null }, ...acc], + [] + ); + } + + *[Symbol.iterator]() { + yield* this.nodes; + } +} +``` + +- Create a `class` with a `constructor` that initializes an empty array, `nodes`, for each instance. +- Define a `size` getter, that returns that uses `Array.prototype.length` to return the number of elements in the `nodes` array. +- Define a `head` getter, that returns the first element of the `nodes` array or `null` if empty. +- Define a `tail` getter, that returns the last element of the `nodes` array or `null` if empty. +- Define an `insertAt()` method, which uses `Array.prototype.splice()` to add a new object in the `nodes` array, updating the `next` key of the previous element. +- Define two convenience methods, `insertFirst()` and `insertLast()` that use the `insertAt()` method to insert a new element at the start or end of the `nodes` array respectively. +- Define a `getAt()` method, which retrieves the element in the given `index`. +- Define a `removeAt()` method, which uses `Array.prototype.splice()` to remove an object in the `nodes` array, updating the `next` key of the previous element. +- Define a `clear()` method, which empties the `nodes` array. +- Define a `reverse()` method, which uses `Array.prototype.reduce()` and the spread operator (`...`) to reverse the order of the `nodes` array, updating the `next` key of each element appropriately. +- Define a generator method for `Symbol.iterator`, which delegates to the `nodes` array's iterator using the `yield*` syntax. + +```js +const list = new LinkedList(); + +list.insertFirst(1); +list.insertFirst(2); +list.insertFirst(3); +list.insertLast(4); +list.insertAt(3, 5); + +list.size; // 5 +list.head.value; // 3 +list.head.next.value; // 2 +list.tail.value; // 4 +[...list.map(e => e.value)]; // [3, 2, 1, 5, 4] + +list.removeAt(1); // 2 +list.getAt(1).value; // 1 +list.head.next.value; // 1 +[...list.map(e => e.value)]; // [3, 1, 5, 4] + +list.reverse(); +[...list.map(e => e.value)]; // [4, 5, 1, 3] + +list.clear(); +list.size; // 0 +``` diff --git a/blog_posts/js-data-structures-queue.md b/blog_posts/js-data-structures-queue.md new file mode 100644 index 000000000..259298b12 --- /dev/null +++ b/blog_posts/js-data-structures-queue.md @@ -0,0 +1,74 @@ +--- +title: JavaScript Data Structures - Queue +type: story +tags: javascript,object,class,array +authors: chalarangelo +cover: blog_images/purple-flower-macro-2.jpg +excerpt: A queue is a linear data structure which follows a first in, first out (FIFO) order of operations. +firstSeen: 2021-07-29T05:00:00-04:00 +--- + +### Definition + +A queue is a linear data structure that behaves like a real-world queue. It follows a first in, first out (FIFO) order of operations, similar to its real-world counterpart. This means that new items are added to the end of the queue, whereas items are removed from the start of the queue. + +![JavaScript Queue visualization](./blog_images/ds-queue.png) + +The main operations of a queue data structure are: + +- `enqueue`: Adds an element to the end of the queue +- `dequeue`: Removes an element from the start of the queue +- `peek`: Retrieves the element at the start of the queue, without removing it +- `isEmpty`: Checks if the queue is empty + +### Implementation + +```js +class Queue { + constructor() { + this.items = []; + } + + enqueue(item) { + this.items.push(item); + } + + dequeue(item) { + return this.items.shift(); + } + + peek(item) { + return this.items[0]; + } + + isEmpty() { + return this.items.length === 0; + } +} +``` + +- Create a `class` with a `constructor` that initializes an empty array, `items`, for each instance. +- Define an `enqueue()` method, which uses `Array.prototype.push()` to add an element to the end of the `items` array. +- Define a `dequeue()` method, which uses `Array.prototype.shift()` to remove an element from the start of the `items` array. +- Define a `peek()` method, which retrieves the value of the first element in the `items` array, without removing it. +- Define an `isEmpty()` method, which uses `Array.prototype.length` to determine if the `items` array is empty. + +```js +const queue = new Queue(); + +queue.isEmpty(); // true + +queue.enqueue('A'); +queue.enqueue('B'); +queue.enqueue('C'); +queue.enqueue('D'); +queue.enqueue('E'); + +queue.isEmpty(); // false + +queue.peek(); // 'A' + +queue.dequeue(); // 'A' +queue.dequeue(); // 'B' +queue.dequeue(); // 'C' +``` diff --git a/blog_posts/js-data-structures-stack.md b/blog_posts/js-data-structures-stack.md new file mode 100644 index 000000000..25217e7df --- /dev/null +++ b/blog_posts/js-data-structures-stack.md @@ -0,0 +1,72 @@ +--- +title: JavaScript Data Structures - Stack +type: story +tags: javascript,object,class,array +authors: chalarangelo +cover: blog_images/purple-flower-macro-1.jpg +excerpt: A stack is a linear data structure which follows a last in, first out (LIFO) order of operations. +firstSeen: 2021-08-03T05:00:00-04:00 +--- + +### Definition + +A stack is a linear data structure that behaves like a real-world stack of items. It follows a last in, first out (LIFO) order of operations, similar to its real-world counterpart. This means that new items are added to the top of the stack and items are removed from the top of the stack as well. + +![JavaScript Stack visualization](./blog_images/ds-stack.png) + +The main operations of a stack data structure are: + +- `push`: Adds an element to the top of the stack +- `pop`: Removes an element from the top of the stack +- `peek`: Retrieves the element at the top of the stack, without removing it +- `isEmpty`: Checks if the stack is empty + +### Implementation + +```js +class Stack { + constructor() { + this.items = []; + } + + push(item) { + this.items.unshift(item); + } + + pop(item) { + return this.items.shift(); + } + + peek(item) { + return this.items[0]; + } + + isEmpty() { + return this.items.length === 0; + } +} +``` + +- Create a `class` with a `constructor` that initializes an empty array, `items`, for each instance. +- Define a `push()` method, which uses `Array.prototype.unshift()` to add an element to the start of the `items` array. +- Define a `pop()` method, which uses `Array.prototype.shift()` to remove an element from the start of the `items` array. +- Define a `peek()` method, which retrieves the value of the first element in the `items` array, without removing it. +- Define an `isEmpty()` method, which uses `Array.prototype.length` to determine if the `items` array is empty. + +```js +const stack = new Stack(); + +stack.push('apples'); +stack.push('oranges'); +stack.push('pears'); + +stack.isEmpty(); // false + +stack.peek(); // 'pears' + +stack.pop(); // 'pears' +stack.pop(); // 'oranges' +stack.pop(); // 'apples' + +stack.isEmpty(); // true +``` diff --git a/blog_posts/js-data-structures-tree.md b/blog_posts/js-data-structures-tree.md new file mode 100644 index 000000000..8abf98703 --- /dev/null +++ b/blog_posts/js-data-structures-tree.md @@ -0,0 +1,136 @@ +--- +title: JavaScript Data Structures - Tree +type: story +tags: javascript,object,class,array +authors: chalarangelo +cover: blog_images/purple-flower-macro-2.jpg +excerpt: A tree is a data structure consisting of a set of linked nodes representing a hierarchical tree structure. +firstSeen: 2021-08-22T05:00:00-04:00 +--- + +### Definition + +A tree is a data structure consisting of a set of linked nodes that represent a hierarchical tree structure. Each node is linked to others via parent-children relationship. The first node in the tree is the root, whereas nodes without any children are the leaves. + +![JavaScript Tree visualization](./blog_images/ds-tree.png) + +Each node in a tree data structure must have the following properties: + +- `key`: The key of the node +- `value`: The value of the node +- `parent`: The parent of the node (`null` if there is none) +- `children`: An array of pointers to the node's children + +The main operations of a tree data structure are: + +- `insert`: Inserts a node as a child of the given parent node +- `remove`: Removes a node and its children from the tree +- `find`: Retrieves a given node +- `preOrderTraversal`: Traverses the tree by recursively traversing each node followed by its children +- `postOrderTraversal`: Traverses the tree by recursively traversing each node's children followed by the node + +### Implementation + +```js +class TreeNode { + constructor(key, value = key, parent = null) { + this.key = key; + this.value = value; + this.parent = parent; + this.children = []; + } + + get isLeaf() { + return this.children.length === 0; + } + + get hasChildren() { + return !this.isLeaf; + } +} + +class Tree { + constructor(key, value = key) { + this.root = new TreeNode(key, value); + } + + *preOrderTraversal(node = this.root) { + yield node; + if (node.children.length) { + for (let child of node.children) { + yield* this.preOrderTraversal(child); + } + } + } + + *postOrderTraversal(node = this.root) { + if (node.children.length) { + for (let child of node.children) { + yield* this.postOrderTraversal(child); + } + } + yield node; + } + + insert(parentNodeKey, key, value = key) { + for (let node of this.preOrderTraversal()) { + if (node.key === parentNodeKey) { + node.children.push(new TreeNode(key, value, node)); + return true; + } + } + return false; + } + + remove(key) { + for (let node of this.preOrderTraversal()) { + const filtered = node.children.filter(c => c.key !== key); + if (filtered.length !== node.children.length) { + node.children = filtered; + return true; + } + } + return false; + } + + find(key) { + for (let node of this.preOrderTraversal()) { + if (node.key === key) return node; + } + return undefined; + } +} +``` + +- Create a `class` for the `TreeNode` with a `constructor` that initializes the appropriate `key`, `value`, `parent` and `children` properties. +- Define an `isLeaf` getter, that uses `Array.prototype.length` to check if `children` is empty. +- Define a `hasChildren` getter, that is the reverse of the `isLeaf` getter. +- Create a `class` for the `Tree` with a `constructor` that initializes the `root` of the tree. +- Define a `preOrderTraversal()` generator method that traverses the tree in pre-order, using the `yield*` syntax to recursively delegate traversal to itself. +- Define a `postOrderTraversal()` generator method that traverses the tree in post-order, using the `yield*` syntax to recursively delegate traversal to itself. +- Define an `insert()` method, that uses the `preOrderTraversal()` method and `Array.prototype.push()` to add a new `TreeNode` to the tree. +- Define a `remove()` method, that uses the `preOrderTraversal()` method and `Array.prototype.filter()` to remove a `TreeNode` from the tree. +- Define a `find()` method, that uses the `preOrderTraversal()` method to retrieve the given node in the tree. + +```js +const tree = new Tree(1, 'AB'); + +tree.insert(1, 11, 'AC'); +tree.insert(1, 12, 'BC'); +tree.insert(12, 121, 'BG'); + +[...tree.preOrderTraversal()].map(x => x.value); +// ['AB', 'AC', 'BC', 'BCG'] + +tree.root.value; // 'AB' +tree.root.hasChildren; // true + +tree.find(12).isLeaf; // false +tree.find(121).isLeaf; // true +tree.find(121).parent.value; // 'BC' + +tree.remove(12); + +[...tree.postOrderTraversal()].map(x => x.value); +// ['AC', 'AB'] +```