From 1c62cb16ccacd7a2795dc3c35a7c5cc78efae59c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 1 Oct 2025 18:57:17 +0000 Subject: [PATCH 1/2] feat: Implement Trie data structure This commit introduces a Trie data structure for efficient prefix-based string searching. It includes functionality for insertion, searching, and prefix matching. Co-authored-by: shivamkasoudhan --- trie | Bin 0 -> 90664 bytes trie.cpp | 165 ++++++++++++++++++++++++++++++++++++++++++++++++ trie_simple | Bin 0 -> 73272 bytes trie_simple.cpp | 87 +++++++++++++++++++++++++ 4 files changed, 252 insertions(+) create mode 100755 trie create mode 100644 trie.cpp create mode 100755 trie_simple create mode 100644 trie_simple.cpp diff --git a/trie b/trie new file mode 100755 index 0000000000000000000000000000000000000000..f593d4cc3da60c81c295e7b5f03fa6dc8cc8913c GIT binary patch literal 90664 zcmeHw4}4U`wf{{>1QAI@u&Agj^$#khNeD5ZX!x_Zk$-6t6ct=TvXE&0nQSol)TRQK zG{jOB#a4Z(<+apOr9P`vDMqvgebl10iWW7sRyRU5{&|{OYJT5y=FGiw@9qW@(Y{~t z@*!vEoHJ+6oS8Xu=Fi^!mVf5-#Ds(amOKNjbFBn??l?&yas?l`n6T=}wQ{VXR<3oT z<+Ba}DhdB{6)6g)iewE32_K;;-+G~Y;V9wLP?t`S^2K|6UsDtftyGn!e983DM}P46 z_^%C%=c=@ZW)V9sce>pR0cf+>Hp@RQ7Rg)QD{p;ov-k(;ZpkS z)la9jei~{$^CjOk*DJwZm^D!0HPq#O6Zy!VpY=%<#sVoXUi+;Pdud4hiykW1hyT>q z&YwNkLUXkdPS~x)MwK@ChYOwfhZZlMbn^`_7T?x7;-_E#`!C88@@f}-qoRCKcGfp4 zO3$n)uc~i2vmqz@%ip9cb$Kih{4t@j-6-&+$X!uz8^{8kp{4LNu7Jfn;Ip2w+ z|6k(ha~zBtOaA?F@aLmH#^N6tN1u=4*vE<^=l(eL&52{5(l~MoHDMJ`ap0xA&C2H58aYm}AS z#z`wx@K!Lmq_VmySQjp?4F`i(Ft2D`R9B!QPA@2|E(}rwpcT=rRYzP@T&mc?iJo2@T!cYVg-#JJDeI>W z`sTuli%xM`iAo|<|;MQja>oByGX^ z&Pa!t((<~R>bj8h*sPN3`fxwHepX%i)hvfigD&cf+rArzt4MyMLQN{vW6<0a^nj|U zUV{10oU!`hpT@I$>31t+1}Bqi3zn5*Hb>vgFOk79x9X~LRKFlpS6_)aoo4=$D=-CL z5nPNxYQgEF;edx1B6mSyL1l3{VaVq#E+;2+b;zm=RicqCaMguNOU^ihmOt5)TvCE; zl**t~iNc>hb!u>2TDo=q%)BX6gPCbr_NQ^q$IP_x3O#Qgn6uKxWxA3XIo8y9^CnNp z3udH^OPk=LWlk_?CdK@mmYIRzClPD3M63%F@h=&l2jDM#rhfylW*cav1|ZBOZu)m9 z{trgJ!vK>we}XlHDG6BNk*oyp(&ssd&2$`@f6B7MEbuJ>jvnG!AoN_MhnJThZb5dn z;2!w?t%%ePv6e}?{+RMZY4y6o&Ogw~6&lH#(tR5u;=`;pf-B?nVCz36z3kchQ2rq6 zUY%z8K(5BjqxVfDX|-N4h@_^anD3w&jPuPpGD1-`PtR~Gon0{^ZS z_#ox@PXf#L4hl3U|M@>HE3mRHoY=E7u>6TZk8_oK#@F6uSv@C*@i*m!T#NY2h|>9b zPfyR{HJqjeN#}D;nie9R+nh8lKsxVt(zNjCyxU3Bf}`^$Crt~D&g-2t1^b<~PMQ{K zor|0_Ei^g{oHQ*kI;S{kT3B>uI%!%^bdGk?w2x>(V6I^Y2ncM{-<_*X+hZe zx|5~_MCWr(nidY7+nh8l7&`BF(zHPg?|N#Ec}U*}0L^`xsj>BXM( zWuEkfp7d-_db%flt|y)CNvC8KI^%D7P0wBy zXnH-c{Ee>sB7a6(##4coNk7Lh?iukXuzt8WE#-t2=#+4PEt3*ZSfC~O6A%Iuy2B&j z8n@DCxW+?!I#Nz(B)-Q5g8x|}wv2z8z-gZbnz{myy>njRvF-tZgeL>fei|MQ0WBh6 zP)~>I=Q=<6&&El=MUhth8FK^6Crt#W6=?cvcu1gm(qbecFYW8;iIl<{J(+wb_!1T% zuU$Un@4N~``Y;#y3IpHX8-PPD4Kyd6Oe^0&lRuKt7HC z#HSom4unk@k%8tBkKInm7YOqVVOo+0+N_5Q>q^CXtHb(ZX7#rQnpSq9pfzg(EpuA~ zEq;`I_?s7##AiriHhcppz=}Rx&NNmDyx{l&s*8LO)E;>oo&$ndYPVPFt&Y?Vc%W#h z@4yeU29Pw(ka~+D)q?3u0_P~H$vzf9 zJ?qumsM_t33#shp5lcA9EgoiVk~3}A{}$FW6ze$-Yo1~~)@EHLtQHZP9+&>%^VXy0 zBHQL|n8Bj^$0e}&3Jhu}`g`#18Hf)%IMb7Xrq?1rqN+8Ixc^oX!%9D@D%(a?`rz+Q z#iyc4(MZX+OXim3zjCJb$O6h?t2oB1;vX)wRXi@HiVwlmqT*Ps;%SbGpOO;IBT^g{ zM;R*S8!EP0+)PR|k9Z1q$fTiPP-?M?gAElg5fw>_@}2uQQ+p&#T(%W+y(+dlDrUu0@fpOJ zqT*DoVy>g&2&LjFj*8<96_VR^;M(sl|QbqyKeO zoGvP6*eXUiQ+s3~<*==zY(LtM6s3%x3Shcj?PUwcd}D~@wiJW8v0grnkRB))k>_4jQn zUZd1vD{lJGu_CUDv5H6AD&EbR+9SufR4ntV`1b;m%__cpbSxFuV09-}tOGCi#VXFk zR(yn%Xdba+jjiHKN-b9La6`ofXe6>?lVom5?%_=Bk*k!9RgR3ccD|K0UX5SPw>2Ka z8v7g72x?Ig8rS6#7*@~Rt3Gh-vtX=R%mTc)t28=H>F;7($D zuIy0U4A^up-$+s*jmlxut>(J0=_V;HwTwGRc8kC7a9)%Jc`LiAOKZFVsL+hxrat`KOBoYfw?;pqcm9^i~A4g0c$$%kLJEC7WaQK_ljul z^jO?iG53Yh+=;Qc^O$=~H23rG#<0n;%>7A1R4soJi~Da!Q7v~wb2r4|ew4ZIisrr` z7Wem=yC#}@R4nci=AIJG{mwfvYB`>{heva_#o`{w+;3u`>U1~mgEz(EerW{RWOFok zX)NxaGxv9+xwB(&UrXG3f*v&vbF zf@#gUgWNKt?$Bj!SD-0>P%K5DM4&lU<;TX(wz@;`xob}nVGLJjEJyW6wNWRk7i2yUzq|%Qb&F#Eof}2daqX+uGVh@I(QF-0{(M8Hb^3El ze!7ycOaSv@fGSfjZ$t6zkyCl*V$;JL3#}#J*PJ}(0@`k?YNN@1vcr{5T)os|{(khF zh<*Fs>akvQe=;{GHlOP8(&`*#{2W{TRLxk{VQ%yfZUx0H1sL3gXpAvvv|Zl)vu6J; zGSVez8_cgA^tppR6TW3G(k$^iBvHs0Q!|3@Ot|3*dos0e5P4Z7BiaY7eOvi}e*#8U zQNrZ|yglX}k0q%V^H7To7#OY5H37Ok@*u_+dgU%?*b3MIh+1I(t&@uOZ?@B{iocD$ zF6y?Kn0lag%7fM_|3hG7!#qyWMU#Igr(5PeBnH{b_499sjdmjQc0qp%G~CZ5pmvhH zwWxq6=WuGuCWM;A!NJn$)b%98KGI&$fASsS04X$SaiKrgFU2^1b2RBde55$fGuFkGxFAaJT7qfFh%oD5FMF z9?Z>wvAWHuBCe9Q%?yuiYB^JTq(aHGZL^h{(`}n8fYP?vtQ@b~FzZnr*NotcHFKm>(9w&> z9Sn_n^QbginRN0KW!g^!n&z%EJ1CtRH2XJDYj0Fd+Df0VW&@1p5egpn*nj5@s&jkfLaMvV z(W>huJa-ms?vhUY5XtT5Cxo6!I%Tgerpac7})-fd`8VmAktw+*8D{D3n& z364g#9yfJ+|Y$O@vlED1xV!;r3tntW=zzY8sB?MV(S_je^c>31U${kZbOD{aenzq!!Dw7&jzGG zQn6rNC7<2a8Og)8slG#3`xRyziDU;!dWMr2qK~JnZS%%%dVIi2E%^zmpi~0JiqYYT zUn7h%TA8wItVV&3imF|aoAbHG)KgB|hUGi1HY8JEP7TvMh=H0#?uHbV#BL{!XFL+qQO#YTb2r`2yyTY) zAYvBap_mDw44FwP!^*MAcF`u0&U%r11Wdkg@?6zBb5XzsTJeB$L!ddIbOX#y#cDrg z#Us=W6#@iIR!ws^p{UKkwF08))x>ry$^v~e=-Ywc2|V#Z!v#pc`lt_bBFnKYlh^db ztA5-_%?rSzy45dO z*2{nzJqCmNs`zSA;{7TzfsK<_4dhJJ=ubgqI@aQZ+7pDQdnfv;9QO6_54? z>(CXpuYssGaRca5)En{t4F67aU-lh{nY&Y#o)>7DwHc%hYM)c}nS2zj9Hkz$$M52P z#+)+zW`JqWp_CN@J5U^l(I}D!=ik+C8))s3V#?fvzD?^DKeWWO{rkwJgl+e?!7HKR z;kFzfvG7HZB;+Y#~(SMv4HN z%$fZri3#DX(V2(;R#k?k0c$INMy^FKP|3ix=Q`Vy?YR`T^)`3G*OMFtRJ+umG|$}R zqrnhsbfMtaC_sR^&LH~_rEZsZ(7py0-BDglxe#R6Dm{*qM>FNQ}nJXCZq@JRazn^&f$9v`%z zBe3#MxNHf3{V*nYJ8C@pkI3ffaayv=C-8V#0F_Zll-;5^?{h~Hq|F$Zco!VaPIMW- z_Q+p&(4g^YN?2f{cknnFi76#wg^$J%!RwJ^viVDA1b>09p{@dvH z6&m{Ujudj#<1>-5AHwy3{g+?6*$STlv~1Mqpp_~_b;Rl~1^pkv*t|hv=mo0$7TT+0 zgB?b~T4vpbU~U~Ovoo&=8J`WbjQHqG5Y*c32;$+OoOD!*=%}wf@=K-8I?Ot|$oWDF zgtteM$MjxkX5ks)kBlZ2WW z4DW`~;EF1i@6ELbJjMDHA%@eDdl#B50toe})yc9nh0t1T7NsK+6E3AyiRo>k#v9~! zbL2v&piQ$nkeLK^Nw7qwq2o$Hci^)pvPowRNhNeXTtGh?toV#slJ~TRsaDEM^{kz| zn(pxI8|yXGxA(SE12+9809O@g`W4+H4avo*nJzMor_1ob*3-jF| zEv0!a7q94NGaVbHyjkjB6=-f@y@jc{zA+$SPLN&hN~$Y$u%GbA!={Lm{aA-AZW{x% z7?2H>=C#T~bJsv;^mZCn{#GK>i#E_0z+tSYU0LGUjP8oGEEkJ9+{?vHl=Dn3n3sze z{w{jCn2kKNlCsUSmTuT{{D(^Zszw=@?F?Z*fm% zwV2~ZzRE9La8(q?>(naMJ5@8AmO=0)dZEWspR_L(g=g;Z)AZ|E&6d4JtJyue(4)C7 z=*e>_r+xL|F4%!gbI3Ea{-eaVpP(KZbCKJCu>lifxsNa&17OX}CjY9LF}KrEE3`-p zomTR~z76T^P@CXR!0mughDUq{wpZanaTwu5(u+wI$`0Kw#9cL1nS=0Ew59B@oj`0% znboS$JSC3#A4a1~&LUeuXGR~v=(xwjU~7-G5KnYSzH|qn+as?6M#?EcV%_Ux+xPI) zl?sk-w5`hn#`ah2qjFOX&#Cv1u!**Zrk@U&3ob^j6W6f^!DqEu6_I&nGEKG1ukEnv zpK3GX( z8+Ca9i(MLY@+QN`cL7Zv)Ow+mk(W*U)ycrs~+6BaX7@M z-EMiRQEUzDzI2?sFX`RJ92AdYv0C7b!dY!_Kbs*R#naweDjFTy00k?Ife1K6WzzP@ zKu$h^B)8F<&~au{=S+M-P1*Yl(77T_QwGr{Uk>{}qxJ2cug2;i3Js2dI1B;G2v9Ic zTJzU9k1kgeLgT2RvE1Dx42KK5ojV+ z2ksagZ1g|VX)mgu00es;&igDePw;otB8FAcZYRvy{*F4jl*l~a0cKAUQXObVm-ngv zt+uu{N=%15?C-=zy|jbsJAjkW@nz#ABTk!M_&3E-wMmK5tG6sm@opk$d#;Dx{o=wu1cHuLu zij#S4#-L#_EL1BcsHT7w*$L5DL>XjNUfHlUZdYqX_cHrU6bvaeU)gh=tuQIKye%Eg z)`ewo%7bn2J2*6RRc|4zmt!%i z-v*`oT{W(uk#{E`HiXSGU`7lXlMI?pa2!#;6`@6&7zF8A{Pjzxd(6 z>;p#SnJAubhaTs~E=kQ(U1YvAH;1kzbuZpuPX)kjEWOR{w5y(VrPFo8&ADovj zRWocxCq%nF;2J$2^*-u+|SKG6R@R?encv_mb~qfR*t`h>A?a&JGSz>3nnqGOoC<2D~>hv*{NNNX={tHNtDILWWgTB=5%ZlnHcuWTssnF%xDCZzrs+;iTFhfQ(ki z*Z>_=0dUyO3t*U6AEjNXh<~ShJ75FJNn$yEWNeST$-xkIE?4HTSnj6P8qd;!Th+3D#LpVFqqntgyA|+AFHz)f5=LtWWjsP*u`lT z_KIAd?7pYu!kfXPIR|7B@s=yw>dRRRbyoutQ&o}{M)~wPIv4GDZi5Agibh~BNd|yN zw-4YTpVom8Le}i2nRw46{^a7>N!go~AeI+h8t9}8@t{#4arw2otdy1iRGl8CY>%9+ zuKl4S!K7+els-q0%Vm9IelvG7)Ey8X8U{Jkl!d|~teR_T!CHyx5QAb?Ar_fyu%|&~ zX0u9_z-(Ju+cFD79-sY@naw@`aN?%$yJ%(iK-0)rdcgv!p=c@S z!!R&r4R1I})w1{LU})}?-M{wC!K&Y5)a=1V3pHzdy=Xa(_3e+>L0wtNxW< z@7$fsw}IOu4e=ve6;8i?WcrfmdEYb3-{#fUC9b(w>bKm~=(0Ww#@oku$$}9@eNA<+ zJQRaTdo)G?(5`KpnSbl)0m&6vxood$qdYil8MW_2fuGl2HaG3jxK2zyTYa1|5n?9T zOPTOds1qF>rIUN+&sgp3!TWn$tMNIgt$QBHh0{SlQCmS~Y^BybJJDsR>%d&-Ix;JL zOyj;u?Y!aU6c5y|@qVFrT*mx}E++AwKke7QDf8=X+ky22+9eOV26?n0Jl$&CuXs|k zm#Q+Sd9~k+o=?vJ=uX39J0LYZ4Fji6HW#7|wE?gT>Z0CUi7Q!M7}UKq_$4&(wk+)L zxChL$=~3>Sf`7X>+AhGJg}o9*Pdmn@4&=>*8_!$Y)gd*m8U(*3hGx(h(ZslSgLp?vBt9~^7M$2rgT z@2uZ~PcWftYdA^`XpssnFfveYxt&kzEK_%r1v*^kcEvHNP7DRv<}8Zxd|V!lF|~rk zvfK^`fa50pFPPI9#?fl`f^o|BsP++tghwc};5C_heH^D(%vDcv>|Sw?dIn3csDn?B z-1SQyNa)Nv0|{*uOkpObcKj8nu}tjpJZyO72M&2xG#U~8USvxW89yM2FHKZPh)OFjaW*=bQLV7#WtwzJD z_rDXvC!5G7xa$f@l&1IkLBcK!Utw^_!i1b+&Zg(gZi{pZQsb^{+9nG`a#`(> z|KaNMis?jD)VpGO4BTu`R^Z-GYz0~&cmr&PmZ8NQY^QenH<8e{?xS23p4E86vs8QV zg0G3^GTY_aW5gK|Hp<0h_PXX_YRYr+m?O4j?z^4|_*9f>_RrWQc>S)=;{&>=nm?jh z5%3{Eb$PRURVr*@JElo$p=9g6KmVN)d!(uvr{@G2sZZUDj`QI!s43Wg^8g)ACigfC zZzWu|$9Jy1&ZSp=j2n~R#OH03w&jPuPpGD1-`Pt zR~Gon0$*9+D+~M|umJs%96ggJP4X4hmWO=P@T;}HLjEPz`r44MC{!2rfv8m-oRP*j z{L-$kyb3?38uk@emHO&J#kD166D|B4Cw{mWfB926eyg;+x{5z9vlbOs;U9rg?CWyg zP^s^#>e|w}i9XIamH_|3FLiQOl~^{`r!q4vwFYN8O6ZacSp(mxEa=pUK5Ke)Jqns# z9ri8ePX+^#jbsI-DW8p0rI~EiwZ&CSLWEJDtij_99q3mJ>n>kbp(F)p%aQu>;Od$KAKTBDMZboJ!+!Qfp7oYQW)u z>j6ve#!)2TtRMIE?8X6T8aAGiaLPOda0~GB0Cxjk0k{wFZopBvKKC%-Ie^at&IkMi z@EX7|*!Q~w@La$xfC~V31Fi<#2e=V%6b|cm0iFYBVUuz`pbzjGz+AvP0Jj5f0gM3d z1{{R#*L{HLfTM8yc^Tk2fU5zo0nB^|^#LpZd;;)Q>|xTokv_rM%n;OT*dskXV*w`u z&IG&!umbREz}0|zaSrNdc!fX@NW1biQ` z0&p1ad8`IJ2XG_cdcd84iP%v25bzSf;kcyp1Hdf6t$;;<&jW@5{|R^tU^cGoJOH>5 z@Oi+S06zqL18^h`&(Fp6vvUAv;{sS2U>dHbtpR)ia5La&+{N1kSPMw+-Mb%fBwot* z0$>ikoDXmwU@G>c8vuQP>j2LM+zeO&xEpXQuD2!)v#gzfCjoWi|bSi+Tgr0`3AF_dM#2OTicZ5#<6l0L}#bE?@;drd(9ERL;eJN;SH?mfb>?~DS!b$|8A5ExEgRZ z;7foT0rvpz037`a^agANOg+Z3o(4<@EPEB@0^R^v1GpY=4d6DwO@JMMI{`lh>;fG6 z8uA}&Sz`gy0cQi|12zEG0Nx6?2JmgbO@P}wkRR}Uz%Ia~KO_Gr%Q^}$9dHa_K41W_ z1~3PQ<97fq1>6F-32--H+MDn@fYSj-;Z4*N-|Fef1*`&G2)Gfj5%4*{R=~dlwgE1T zz%Kw^2bhExtI&(fP6FHqI1O-UC;STFSilv47XYpYECYN3@M^#}09OMh;jQR*0iFc- z3E(uqv3P4-Dc}WwD*)#Mt_Q3Fd;)MQ;2VI2d(dt^%L)OG0bBtX06b(b#tGm^z*T_D z0XG1y1>6oe_-|-8z)^rhPPDA^0LKC@0GtVU4PXV}YQWWij{$B3`~%<)z`p|S1?&bK zG8%S&2l)Zh0A~W;4OjuV18_Cq;CGQ9@SlLs1HRM+{{r|i;K;9o{vO5|;3&X(fad}> z09F951H2A!GvFG)U4Xj)y8)-ZkNhWD)?C0Gz&gNrfGYtT0Dla)4)8I+&43u%{3Kjm zU?nu9CLB9t;Gi`L3Xg7JrT(y|=M>_YHW1!V{kCitV9u@R4~h6NG%3zooIdU()I#N-4_LDf{g4pyPCpEAPx3Lmo&0kg`ViE6Dd-q}4*i=BeJtoT zptC)+ehVD>Ov!(ynZMMbSAf0(`Qz1ZHRxA^j&AIff1#6qBk0RO|At9l?9g|BzN(k} zdxd_6nSYU!e+b&+7UUme(t{3tEa-RiB7f$7=oLa=Wy(+d78k(n4|>wZUh2Oe`VOI= zYRbRN(SI-KLm)q1`wSUiS;zE3C$R}v=g;JkGVq5dkF%^}^?1Qh;@@2!g#2_BE@=*W zk?te@mrh;KgV z>A&phxq$fcJbdRkd@DdNzpba|&xqfW&NBD{%LfeDnPS`JdFVCzr-%9AtsM5cGKCun6=T(4nSN{&c7Ou;hsIs>(IMFFYSds689b#fj-vEU*hDa zcY;=dKH8*T?9k_dPBtJNW9iob`l>kP`;euE#t7)t_maK~kFD!y_`@xbaXonA`Lo@i z-zYL-<=-dtc>%Z%I$$!p%=<|hsI_hATU#x881L_*k$p&R6oqWY54o@q1c7SJr z$#eed0n3vTd1j>k`UH3m!FqI_$&;uiHln`)`njN=XVOv5l_-YjNrSMy1f9mBt>>jq zTb=~^BG3`eJM@_jeH!SrZa&SVFLdaopcjKa!KBwX^cA3A-An%UpsxTu!^~f%^80|h z1AX~c(7%b#NsBPM>b{Z~U?$>e1J4uSxrBJ8m^^BN9|Qaw;GuPWD*2(&2G5Ke2ec%u zPF{XU;yw~cc1lIxc@=B=*GOKn!AtG;tkRA6Xq?>oE5w?_w+9x~x)I+G6d$$0szVVo zK8RQmpKYGRsmwt14WLf}J>Nw?-==Q|y%zL%Z5#ppCeY)x@gVFS+zNWUHXZ|dGw3Iq z<b4D?3OWBDT=WG+M>y$^gy84i1FUq+EbebQM<{RZ0b3_jIPF@91 ztUgIP%mcj(^o#J>u1n%1%j3{}pzi`b4Eho?KaDwKj@k#F&EPr5_eHOAB{hTM!^^-fgZ0;=YW0`=vJa>`r2LyrI?7L6>GYd6@a%+)c(Da_mA65U z=cg?UnSG$oG0R9)N{|lS7&l|FCrxdT)Qk?J`TlB^BNIH!@!6*5wG3FDv^+VH zf-InY_&*KVZv-FtyrijyEa4$pG)~ro=L+h(UpIKD?=EoqF6}Kx9#iwBU8c;H)Hb_7 z{|NMWeWx3A3wz|T`nC_Gks!Q}`~#qeEuU=vzmDzC0nf9LF&!)>PlNQ2`Ji`$KFg#h zPGbS2<29h4jD2_jC%-XI-vPqcK+iVmvY+DvZVTvXpkHg!NylnO#}4qU0#7_USlCRW zGl4rz8Hu;pI{H9Q#Th}oF_a7X&|c^ZK_Ai!y%F@mz0g}hAJhxI4fI1mk2QwK#vP!4 zg!;wPpEdwL1U=q5&IdZ>j~9pJf^PMq-$KwoMgAg}ebr)|^lJn?6Zv0p(Vw^N-wJvc z=<(XG4fIbykJpDfK;PR7-GcLcwHLY%^qru`ieqTaK;wky@6x=qe6Z7xoq1^&%}Z3* z3dp*pJ^mcH8gx2eis#EVg1!UvYt1n^Ak0pI7JfRCOz!X^Fcoe^jPr<<*xz#bkI*V^UEHc z54bg;XMpaC+mwzMX&oN`PZ&J$`t{vU!)_L=XpPa!uV*=IPmTkZut z!=%f4o9J1fw}Bqd{zaf~?WKG=ck9i*w}4Le%{R+WRBK%ya5PSy1AQ$%Cym2mP0z`R ztL-}Mf{dyE6W<2ippOSV*0`oRj>NWF7Uf4qKr2k1R;(&HpQX+B0_Y=li*8e0VKa*(fOQ4exAcx$QaDBqviPrBE6;sOe`3TMul0Qwb zeoiPQ=fT9&@OjFVADv+RBq8|^Bdsk7$y-N4N-};^_ol?;y(6vX5|i&c+KMD5|KMnA z!+_*hj<&WANZx+5_341*=3}f|l9E3<+Il`I`Pau-ZzmB^~1s0 zyN|U#9ZZ-Fhb8~#C~NCs+20*y{b)!!Fdq#`{@o~R_2Jo@M_KP4PCT~{P5#Fy>%O7c zZ;rBVN+Haal;ocsXFZpaeamsyuTlx~T52+Wzx{txv$q|G^$=mMAC|oGcx&CT?5^Xi ze+>H?Fb^D={NKl0&m5V2*YSu&A4^z$g4H=9`PJjCB+O2MNh*6RmC1M1)SA_%pO0 z?EjlY>utfO=G_Y1Z3B|uO0s^MtOOo*XTrEYCs;QcS-I53WA9D0{-heX=Z7aIjF>SM zo25y~TayOdlbn2Cvh_z20CCrH7oa?x@8aZNC0KtU{osG_A4_H8vd*797k|-T@gHF= zKSW=M|JNP!>C@Av&9VMtba+`!X!OL!gpL)YN(&uZnf$=P@WbqLv6RDnK$=>l^F<_laXuts2`z%>F}1#S}9CUB>~4uM?)E#BCHZx`qj zm@Y6^V7|bG0&4^+?fd?BP@6l?`BSG(^o^OzGlVZAD=jlE{mhIBY9`1$O)%~(u2ce2 zN!EKkE+i7vKNGNtv-xL=;#0t)?j4Jt`fs9@Vx@||5O&Ka_*@TuoZz*8(foP%kbuZD z|1pIj{pg{YGr<~ZX@9^-{J94Isa)-^G=3F6Bv@aww13g~pW;I-{WmfH5mxwm#i`5v zi{R@$_@ls(fKBeD9(+9ebkY`pXr5iO5+d_^0_$2YXe5rx$7w|0PotVzl5t7W}=JD#S#=9|Fg# z>mn!y7XeRlJ}g#P?Qc`zT?s#Xs>1WW1wPIad~uD!Yne9-zBI?pe<%hF$yt4Y!t>f4 zA5Rth+vN&BNdc=#@b62#&JaAk!j|MTOjZajXCNjp!f%|d@TUv^6@t(Hrb5tpB|Vjx z;D~>P=y|F_Th|G`^H>3K0L?ph9Rnw*sGP9cztj6Gj0)75<_H3ZeT|DuQg1^TITRKTr6t z6a4#PPhBti&H?f7mVT@I+oeY+{Q43lK-c#X!H*XEYdN0^J|g{)&X?%PfFmIJgC?l- zPZY4u6?}u(S=aZ!1fQL)7nh2cG0SBmI`{%F=UV9RA(H|J`E6r{!vmr#_#4GEd&B8CuZ~1(x+`DAlohJO>1D?jqJ>wNZ zuLEvjyf7KyPr#G@cbuh=y4;ISRQR{0pXW=SD_}I@e|Wk=(49GYek*wIyfEPFvF&yy z@Fd4OuU#(q4N|UdukQ(di|DyZ6>F_INy+(Wl0wj(V|v~IK302uEd1X3*1^9Vk$9{% zsExDRe<=PVJ>OWUP+FhFQxyKsl?t!zc7fo1(-eMz0@e=&Kd43_q*UhAx75d5a_ zza;!H3qMN)@9ifYf?qdT@tr9A<>OSjTV=rU{T0yK1;13}qq+I%68zKBZ?*p%lBMLV zt5bYheg^Qd^e>Hre^}%!lYXn)<#Y^uvj3RNm3$0;ei{Y;d+{f_tlta%i4w&}_YLT| z9rcOTe|8H#cediwa=wQCP5c`r-qv;q3jPJ*$8hGSRq)dns`Q--SOMhMG6lt89q=UI z8;Ac*@YAGR-5*L|5aRcV{q^|zt>C@uf)@nujZa2QRC2s==>*_o>A6w(y>b3MDN+c9<^jFf~J1;B)J{JEi!ara7xwgaYuouZm zLp|t`?rsf+{~eZi7%ggDPb%=l-&ms1x~u}=DPA4f=3=)l6aG~6cY1Wa$iI^uuOFTX zzd-ni%y(M;4T8U=O3ArG0qf6#PxOqV^YfLQK^VvMNVl+lDtNCS7!8L;<*tH1phu6p zQo(!oJ=%fSx~UxM?=b~R&gruLS}w#N!tap$d~w*?pFAP>8$9(LTcr4>$#~K8^*e&! zC~<|>;i9>UKNWh>qvdZG{QJ<09syPw=9MF`Z=Bo4XiKk~rU6fSdgITN;n)ekT?~1m z%4U@bK5(T%U^?LEZ-OsF`_Lo9%u1i9YAJhJx)g}l5b-u{( z;Jy1lBNr_c>z^9`B%zI1(2>3|&y>a_Alt+5LE*(&p zyH@ZoNXI!rZ(MM{n(dM*)uzu?Ia(WB*DD0uIFV58tSh$GSUeM;~j310W5 z3GjEMzjvSWcHlLSDp~!#U-)Z9pNT^Jli`+=wS(&Jt0x>fjZl5zAkAw0cU$^XRD|IdTL$qpY#|JQc=so<-oDgoO5 zdj;=Z|BfkBa=iZba>3tFt>kF^y9GZC?L!aTAU}^FZXkWU>xF%SKScCAO8ApuSS?df z3^L;28-XYJ*PNxeb-nfp-s|VD#ds$Eo6yem=(4s5-g~|?3G*58NA1@Me(QK8N9$jv z`2p$qwgT2~1>YlhUG8w$k>o!s{Xw_ae8FE2KSa;z3Rph{Ugs4QgKcr}uZx^Z&Q{#~ z4gh>S4gHDAEf9aJ{rP_g{`CUIpQ3=ZL-5yo^dFCTh2-2Na`J_LrQp5ibVF+uzjwYU z68sU+m!5hBtX~5^Og@|75cGR4H>j}J3h_3k z-n%b7XnAb=%m<$2Pb*Y{wGE#Tytlo6yF&4g#XLz5f2W2%6qeM6Gt#Q9V6b>mc`#hO z!~&u&T)%j6T8UK}stqkEuM3B2gW<|xNkw%PUd0#;mR1LsR8%i2t_YUm6@_)d;`#=w zq`DHXt_+7t)6!#e1Q(ZAl?RJ!Ym1i!LsjA0W!Bl?8Llz?y1ZUXA8pf+N z(@OAK%-|)n3&S~3ArvkyuNape1aCOBgcPg}mXsAkoASC~eN|oglB!T?-sOIOU$a#9 zJGlO%cPcQTr z1&bz6ndwIkSH&_jf`Q_?vT*UDicm1Ls5)2{s;CLo=FKcm_ZJrD%`OaPq%%jbs=73k zR~XK!DK4+gn^962&PcDXD!;Nm6s!r?=H<{kNoRuv_^i^<;^O*>Fl)^GcM6v+%mg61+%L2|}sk>Z|ZhP4uJE zU}bSlUY``qfP$!687u+$P|7F`RxoOvMODc{4=eQ-6i)V9GvlmaL5QT_b)n(V`Sr!M zrDVd)^k9B%Il5pi6N5F?cx@`$a%v`oWQdS2vjXJ}hW7nw(M&SK)Qr3f3JTMM{tJ*O z3}!_`Y@drY)gVavc(TdW8MZv-e!NQzi zL6L1-)rq;AlbHV0c^uW5N;wN-&*-=qAcg4YCE<*^u($8neQGu|%E$@MsxA%k3u=SZ zOYnkMNSZ+XW10*ZCYCZ)lVWup7I&60bj2Vv$kcy~GQS^VY8FNzztokiyQse8icq*t zj~Uy&Wn=|u>;`dRytWvg*6i_p80S1Vvs2 zc5jZ?nc4l5)25EEEdg~gg_d7QQ%JBJ^Lp>|2)PXSOrAR6H!!9{#igp6Gb=MN_M)a9 zds=cPjWXnc_Z#;waJxa^AUcX`*322;A z_tiW~^Qb)m^e2e(1g_-y5WZ3XTi^{;3lN!cq^ed2Xwkf?(ojQCqS<+MH3&74u`my8 zlw#T9Uk_aKW9UmyB2O12cPTxBdl@Z9i%UzpITg|7BGOU)|&N*ak-w5g(-*cmMu+1Nv?;C&~o=oT-=c1{0QwA{{q3d+fY=w@ZzN@u|wSJ4I>Q1SMr{Bw$e1u#cOc5SG#dMRztVKjxRO0a2(?Vc?9 zDn2%;^5z8V!lmU^!TP#TsZ8+E3#ft_*oop5u3BNLP|zF!eON4!9CLfq8I)hdj10q} z89c5iM_f@mZ#bGtq7`O{#rLxHO8PdYdN2Vp016_Uac# zk2;Q^03{oRVbQ1NJl7bFxmS<9F7zpEq1qYxx`~%Djv^v^zsK)tc-hHwRv^xF8m|J_ z2t)UkT@gKXYp2+sNLufoqmz1n2n^f&Gt?o@(rGntnab*Ywg5G-eK0@)zuJ?^3Bo_8 zi?_C;cRnHH&>WrJWQUbry6 zf8#+#D_KFWHDTh4P*t>i-DNn=z}cHK`kgbx&wM0HoemxZ`&COZ3RMLtgf@cu&$6Me z<9zOu&dyBV7K=_kC(4=NK9EwoXrE)1V;?`1SCx?0uPiRFLaiYYKXh0T>tvBOgfhmd z^T%qmNvOCoPwglm&npeO0J-F#dw+b?3V6BI4_HMn&@;0h%vq-Tow$~)>hYIE{yI`(We~y zjcTMATG6=2aylwdqE_Y@)(82ixXWo}u{k5KjVv^`gLFX!O)paM;ZFS|G@ay{VgNuKt&EV`?puU6r0uTwKFm* zi?0aDcA9f~h<$wYecRl0^mj#QE)JOCx&1Vr>Tu-(r=Hb|F2~`FpMqI^UPx5;HpzYt zfczQh&dmxOJZ9<*m;N71Wa|4gU(B%tPtqBgCDj#lTZQ|)v2WMEND`Bz_O#e|k=rqJ zug7eMDy+hJlm3g?yYLrIVaNQXtp?ye^ez)B+1FJN#>kw)=%6on30bVK!m!WK$0e12 zc6N~OrRku{T>Hu?=f6qdPSFA18(o+=`@We#eotLI zKz5uq(@J08qr?HDvzWgC^qAWb{sK563OHTcinLU`0G$OF=jaSljjF!(5!!t+gA27_ z`;vPbTPREUZrt*r%b77R^2Hwm9D1`EF!-=#prWz;4ElbaDe}#=X&0qoH#iNg+0YQg zmDsv!TKI*R1()L9F`3WZR=gz;qj~L^P3=$9Qj0Qcry0M(ac#tR5NXr>GwjsZ!<`#o ze6X?rix-b~{`VU7sHk4fy2jFHz2oF;;LpIw`&YGACLD^ZwfZ{h)h;;vkXmN=<6Io< ztJo~MLKDlMpda@;?r|=@*^%296raMZQ44Xy`@0T}N_smS!c`A_I7Fk_(YtRKz-1DK z+khieCj%ALOUg@nTNQeGH8vvm<8_=KZC`pk5Z*`WPT#d4e_}Xdk7Lio<{1{BcGeAR#(jJn!TNTH-*}ax~ zGdYnjaxHU!8Zf7_xPdP{@|4ICi@qyXy|{lX@O&JY#|R<5tbGk^pcq?zbTNg`rsAFN zJLfEP;Tu=M0=TM&K#VR5Pexd6pJnxb?&6IW+DE4Q19=5btnZ%#hY;gp0b+VJb)1--blbH?HMd=>3VhXzbc^-fulUC_h{bw29mVKFh|Md?=;bjD zUHhWt=k60&s6}1j)qaB-45v$UFpgu4{yF8MU_L6Ejr%*iqY>n5ON5x9ZoJbiCfqcH z%Oit;FU!7%pm>!VIv_DaMzGNSHXkoyXt9p3;>n~zU93-Diq6~PO<#7;i5-W)%hPP7 z0uFUTX)g}@I=<0Nlj)=>SXPejm^v$#1K3OSjvQIYIVR}u7r6dE{I;U!&UF0vP#s_y zt2LO+>u+p72=(jFq8vR#nJK9$tB|Pp=Wc3*WX}UFq7#v{&Jb@=lh;@&n zgzjLC$E@iJ2PGJf_B)>?uu=1Q)m5&IHr9$}c-M)*elFHvfzr!qz&Q750J>fuk1dU9 zrtf*x{8?I&zqHc0m6j$;Z_lNJ{nS%^pVOX^zszviwn248oj-qiL1A@a&~J`$)fM{c zE!;r@hFyLMV(M|O+d}r5fzN8{lTpKlT(M`X=FX*XP0?|v? zV0+j4UGE`s)AhDu&(hoHI2|mSHC4X`ja%|d+;DZg9(vH1Sgx%6Q7Bdw##jIMcUciT zVXor__f^OKIA4E`zIsh3gS?k(OaKS=E6T2KYjNEV*f;g){K2URy5+xQnH)XS^cu~( z&Q;Yq%9enRalnjYi{f_;*hTbpE`y83`Ad0SO*MUuDz+CtIJZ2}SjH>D_=S2{NbUDc zdi3>foMwL0KF#D!uQ3Jzaziv62*7EbW)|?K{t$ z?RKYSQ89tTwlYfF@2|m-|q1l-t=_7zEE>;MictI#Qgm}cJiWiqGio&1cR|pZy!S*f((p|hUZC>Z z>SasJTo3ha&ld**>ZR`37gtSiAnsKeJGil8yS@eu&MWwxxwc<3b@V$*qtwHjjqRO- zXivA_wi&O!4WKWn+Wdw^_7m$EM>Nrc!P)e4Z*rU! zo;btL6T7p6SMLJgcH!5W)Q0$;y>X~deHSrd)PS)Yz>iG<-74UVYIk#79{{z@AlhjA zsABgQ=R|E=LU;FG>KCXuZNpBrgVfLZ`x*SQ7JXZrc3O?C^Ztz5-Z~yaZN0S+TvUha zRrKW><;R?9;@@iJjf=7Rd&25F!m{~({Wxg$r&F>Dazt|2_puXU4zk2Gky{nx! zoih6J?kW0Ot!ikOm+oUc>$rN4uigI_)$|sKG57X$7u>#0WcSrxC43R@<>Bpk+Kwd}N<)ZQHMw(h~&DBnM|4PhV(sUItB@`{mVjyh5XIH`W%{F2k*%^050@ zWL%~iiG7Xhuz^+=s$Ghg3&%WVu}8(1_Wd4bOdq7p?>XV2SG-^>eCa1VM#SKJDGm$$ zUS5Ff`Hpjc!d&&XefzaGDDN{=9al%_aLfHOQJ7*~R|H&dzf=oZ+`Y}0uM{1K6&I%X zLVW31zCeja;}<8WU=iaLKls4k3+mSfCw`4hzouB;C#k>v+V?j`idxQ_mHMX<{W=W& z3;?eNuyl>_>d6>y!tksY_+nRf9WIuXe7-wf2ciM>-F+vfIRKX)^vZ+gGy8P>^M65% zE>_YV@uC`i8KK(Vh&T|oFt4lFlfb_wG}0FA`@=e|J`oR*1YM+}30E&fZ@tBl>tk}qQ8R~3|3 zL|sq+yeqEk(T}?p(eI7+;+UNwq81IGXTQtbIEvc*aa-ZvYF~q2Y;i>hKY~j?ovL1f zw%neL{}t-6YS+oB*;S6_)&E>E3`-#z5lZ^1$60|9J9 z@_R|l>jGcs^}_=(Av^1$zD_L^DwN=D#9_Qt(R2Q;eh(6JA~r?)c=N*Z9tqFo0h}1= z4P*Pzh+bI~<7d;pxVrkMJJAaLfr&zWjmU99De!W#eQmDoo&CNzk`b zFzOCO=Qrj!`!qqH5goiUKRU4dln?nqKVH=*zv08HD(x^}AE#p&NAx8X{6jbWS*7y? ziLHRyI19xtO%T6h%n=#AG*`c>W*UWMh2aU#eUdM3psUw5sJFTrwT*o#3FC!dHq|e$ z2czl@O5{H{_b0{Kq5g2__U~}3Hzecdxcd`g;;YsA*F@-z&H40h8Rw_CJ>SoEe>cq4 z#rAiU2if|{5{5-zCsMU0j@~Ej>p=@F)TeV6Ic71#l^Cm}e(mBo?%7<3sW?2iq_Vn7 z9p?q*oX4}Hrr*0p6*41;KAr%nGZ^}gc%hU-Bg=IeQO6S$^cmkaqoqPG3xz(NK)3=L zcSY$9%>3mx`l?4?dkuT(KK+V~{SH4)p)0Jc$t-EqZZYdSCpPvUTUTB?FRxK>e?;+@Rp z)m5%U5H!qT#gsul)l`H@BEE8%hL34Ws^vpnsKiPO<0mAoG=7O`T5UBsIx8(y7F=9g zTp0?Ml|q_Mp_mf9m$jiJRD5`)F`#!4k$e}-bk zmE|Z}6^1JoR$57QCH*v%bs(N&A!H!_CyKEA0qTQ>>4Mi_kp3Vr4baTrDET!!$-|%I zNl!*P0snRR>m|R2qdfe?Yd(2MeALrZt@F1@ehsz$$&$&deR$p}kD>pe_f7-HK2cLCb)KHmOwBZy{xpHFdXxKLM2grs`l?MR#X8%HY!4K=@HvvgX+yFK~W zNPZ3T_f!7QJ^4FMQYC3vo3Be&P?xK*zr+Vq|Dt+D(eQB1D9~%aha|tPW}`3)yv8Od zyly|?vL3|;Dqpi*bG@Qym_^RPc)aER4m30WChAalG~95UO6$Mg@?QkO%s=m^ic`bO zv|=K_TYe|-rvKXfGsUQ(Px5Kt&Hph7X8v80U&9)mQJ^<}GL#<*nhX=GW{YC1*{Gnm zzB;Yp5y+on! literal 0 HcmV?d00001 diff --git a/trie.cpp b/trie.cpp new file mode 100644 index 0000000..0b5b220 --- /dev/null +++ b/trie.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include +#include + +class TrieNode { +public: + std::unordered_map> children; + bool isEndOfWord; + + TrieNode() : isEndOfWord(false) {} +}; + +class Trie { +private: + std::unique_ptr root; + + // Helper method to recursively delete nodes + void deleteNode(TrieNode* node) { + if (!node) return; + + for (auto& pair : node->children) { + deleteNode(pair.second.get()); + } + } + +public: + Trie() { + root = std::make_unique(); + } + + // Destructor + ~Trie() { + // Smart pointers will handle cleanup automatically + } + + // Insert a word into the trie + void insert(const std::string& word) { + TrieNode* current = root.get(); + + for (char c : word) { + if (current->children.find(c) == current->children.end()) { + current->children[c] = std::make_unique(); + } + current = current->children[c].get(); + } + + current->isEndOfWord = true; + } + + // Search for a word in the trie + bool search(const std::string& word) { + TrieNode* current = root.get(); + + for (char c : word) { + if (current->children.find(c) == current->children.end()) { + return false; + } + current = current->children[c].get(); + } + + return current->isEndOfWord; + } + + // Check if any word starts with the given prefix + bool startsWith(const std::string& prefix) { + TrieNode* current = root.get(); + + for (char c : prefix) { + if (current->children.find(c) == current->children.end()) { + return false; + } + current = current->children[c].get(); + } + + return true; + } + + // Optional: Get all words with a given prefix + std::vector getWordsWithPrefix(const std::string& prefix) { + std::vector result; + TrieNode* current = root.get(); + + // Navigate to the prefix node + for (char c : prefix) { + if (current->children.find(c) == current->children.end()) { + return result; // No words with this prefix + } + current = current->children[c].get(); + } + + // Collect all words from this node + collectWords(current, prefix, result); + return result; + } + +private: + // Helper method to collect all words from a node + void collectWords(TrieNode* node, const std::string& currentWord, std::vector& result) { + if (node->isEndOfWord) { + result.push_back(currentWord); + } + + for (const auto& pair : node->children) { + collectWords(pair.second.get(), currentWord + pair.first, result); + } + } +}; + +// Test function to demonstrate the Trie functionality +void testTrie() { + Trie trie; + + std::cout << "=== Trie Data Structure Test ===" << std::endl; + + // Test insert and search + std::cout << "\n1. Testing insert and search:" << std::endl; + + trie.insert("apple"); + trie.insert("app"); + trie.insert("application"); + trie.insert("apply"); + trie.insert("banana"); + trie.insert("band"); + + std::cout << "Inserted words: apple, app, application, apply, banana, band" << std::endl; + + // Test search + std::cout << "\n2. Testing search:" << std::endl; + std::cout << "Search 'apple': " << (trie.search("apple") ? "Found" : "Not found") << std::endl; + std::cout << "Search 'app': " << (trie.search("app") ? "Found" : "Not found") << std::endl; + std::cout << "Search 'appl': " << (trie.search("appl") ? "Found" : "Not found") << std::endl; + std::cout << "Search 'banana': " << (trie.search("banana") ? "Found" : "Not found") << std::endl; + std::cout << "Search 'orange': " << (trie.search("orange") ? "Found" : "Not found") << std::endl; + + // Test startsWith + std::cout << "\n3. Testing startsWith:" << std::endl; + std::cout << "StartsWith 'app': " << (trie.startsWith("app") ? "Yes" : "No") << std::endl; + std::cout << "StartsWith 'appl': " << (trie.startsWith("appl") ? "Yes" : "No") << std::endl; + std::cout << "StartsWith 'ban': " << (trie.startsWith("ban") ? "Yes" : "No") << std::endl; + std::cout << "StartsWith 'ora': " << (trie.startsWith("ora") ? "Yes" : "No") << std::endl; + std::cout << "StartsWith 'z': " << (trie.startsWith("z") ? "Yes" : "No") << std::endl; + + // Test getWordsWithPrefix (bonus functionality) + std::cout << "\n4. Testing getWordsWithPrefix (bonus):" << std::endl; + auto wordsWithApp = trie.getWordsWithPrefix("app"); + std::cout << "Words starting with 'app': "; + for (const auto& word : wordsWithApp) { + std::cout << word << " "; + } + std::cout << std::endl; + + auto wordsWithBan = trie.getWordsWithPrefix("ban"); + std::cout << "Words starting with 'ban': "; + for (const auto& word : wordsWithBan) { + std::cout << word << " "; + } + std::cout << std::endl; +} + +int main() { + testTrie(); + return 0; +} \ No newline at end of file diff --git a/trie_simple b/trie_simple new file mode 100755 index 0000000000000000000000000000000000000000..be4794098d9e5ec613c62f5818992c29ee16b355 GIT binary patch literal 73272 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 literal 0 HcmV?d00001 diff --git a/trie_simple.cpp b/trie_simple.cpp new file mode 100644 index 0000000..91f8881 --- /dev/null +++ b/trie_simple.cpp @@ -0,0 +1,87 @@ +#include +#include +#include +#include + +class TrieNode { +public: + std::unordered_map> children; + bool isEndOfWord; + + TrieNode() : isEndOfWord(false) {} +}; + +class Trie { +private: + std::unique_ptr root; + +public: + Trie() { + root = std::make_unique(); + } + + // Insert a word into the trie + void insert(const std::string& word) { + TrieNode* current = root.get(); + + for (char c : word) { + if (current->children.find(c) == current->children.end()) { + current->children[c] = std::make_unique(); + } + current = current->children[c].get(); + } + + current->isEndOfWord = true; + } + + // Search for a word in the trie + bool search(const std::string& word) { + TrieNode* current = root.get(); + + for (char c : word) { + if (current->children.find(c) == current->children.end()) { + return false; + } + current = current->children[c].get(); + } + + return current->isEndOfWord; + } + + // Check if any word starts with the given prefix + bool startsWith(const std::string& prefix) { + TrieNode* current = root.get(); + + for (char c : prefix) { + if (current->children.find(c) == current->children.end()) { + return false; + } + current = current->children[c].get(); + } + + return true; + } +}; + +// Example usage +int main() { + Trie trie; + + // Insert words + trie.insert("apple"); + trie.insert("app"); + trie.insert("application"); + trie.insert("banana"); + + // Test search + std::cout << "Search 'apple': " << (trie.search("apple") ? "true" : "false") << std::endl; + std::cout << "Search 'app': " << (trie.search("app") ? "true" : "false") << std::endl; + std::cout << "Search 'appl': " << (trie.search("appl") ? "true" : "false") << std::endl; + + // Test startsWith + std::cout << "StartsWith 'app': " << (trie.startsWith("app") ? "true" : "false") << std::endl; + std::cout << "StartsWith 'appl': " << (trie.startsWith("appl") ? "true" : "false") << std::endl; + std::cout << "StartsWith 'ban': " << (trie.startsWith("ban") ? "true" : "false") << std::endl; + + return 0; +} \ No newline at end of file From b870e573ab3884f87811e8909484b784416e1dfe Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 1 Oct 2025 19:02:45 +0000 Subject: [PATCH 2/2] Refactor: Use bits/stdc++.h and remove std namespace qualifiers Co-authored-by: shivamkasoudhan --- trie | Bin 90664 -> 90872 bytes trie.cpp | 71 +++++++++++++++++++++++------------------------- trie_simple | Bin 73272 -> 73480 bytes trie_simple.cpp | 32 ++++++++++------------ 4 files changed, 49 insertions(+), 54 deletions(-) diff --git a/trie b/trie index f593d4cc3da60c81c295e7b5f03fa6dc8cc8913c..bbba1e6f8dcdb2c58c62d9b5f983ecdb96ec422f 100755 GIT binary patch delta 15542 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®W>63CJ`)6i8{aog= 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 OtP+FeE!$s^ef}S`J&11r diff --git a/trie.cpp b/trie.cpp index 0b5b220..240c435 100644 --- a/trie.cpp +++ b/trie.cpp @@ -1,12 +1,9 @@ -#include -#include -#include -#include -#include +#include +using namespace std; class TrieNode { public: - std::unordered_map> children; + unordered_map> children; bool isEndOfWord; TrieNode() : isEndOfWord(false) {} @@ -14,7 +11,7 @@ class TrieNode { class Trie { private: - std::unique_ptr root; + unique_ptr root; // Helper method to recursively delete nodes void deleteNode(TrieNode* node) { @@ -27,7 +24,7 @@ class Trie { public: Trie() { - root = std::make_unique(); + root = make_unique(); } // Destructor @@ -36,12 +33,12 @@ class Trie { } // Insert a word into the trie - void insert(const std::string& word) { + void insert(const string& word) { TrieNode* current = root.get(); for (char c : word) { if (current->children.find(c) == current->children.end()) { - current->children[c] = std::make_unique(); + current->children[c] = make_unique(); } current = current->children[c].get(); } @@ -50,7 +47,7 @@ class Trie { } // Search for a word in the trie - bool search(const std::string& word) { + bool search(const string& word) { TrieNode* current = root.get(); for (char c : word) { @@ -64,7 +61,7 @@ class Trie { } // Check if any word starts with the given prefix - bool startsWith(const std::string& prefix) { + bool startsWith(const string& prefix) { TrieNode* current = root.get(); for (char c : prefix) { @@ -78,8 +75,8 @@ class Trie { } // Optional: Get all words with a given prefix - std::vector getWordsWithPrefix(const std::string& prefix) { - std::vector result; + vector getWordsWithPrefix(const string& prefix) { + vector result; TrieNode* current = root.get(); // Navigate to the prefix node @@ -97,7 +94,7 @@ class Trie { private: // Helper method to collect all words from a node - void collectWords(TrieNode* node, const std::string& currentWord, std::vector& result) { + void collectWords(TrieNode* node, const string& currentWord, vector& result) { if (node->isEndOfWord) { result.push_back(currentWord); } @@ -112,10 +109,10 @@ class Trie { void testTrie() { Trie trie; - std::cout << "=== Trie Data Structure Test ===" << std::endl; + cout << "=== Trie Data Structure Test ===" << endl; // Test insert and search - std::cout << "\n1. Testing insert and search:" << std::endl; + cout << "\n1. Testing insert and search:" << endl; trie.insert("apple"); trie.insert("app"); @@ -124,39 +121,39 @@ void testTrie() { trie.insert("banana"); trie.insert("band"); - std::cout << "Inserted words: apple, app, application, apply, banana, band" << std::endl; + cout << "Inserted words: apple, app, application, apply, banana, band" << endl; // Test search - std::cout << "\n2. Testing search:" << std::endl; - std::cout << "Search 'apple': " << (trie.search("apple") ? "Found" : "Not found") << std::endl; - std::cout << "Search 'app': " << (trie.search("app") ? "Found" : "Not found") << std::endl; - std::cout << "Search 'appl': " << (trie.search("appl") ? "Found" : "Not found") << std::endl; - std::cout << "Search 'banana': " << (trie.search("banana") ? "Found" : "Not found") << std::endl; - std::cout << "Search 'orange': " << (trie.search("orange") ? "Found" : "Not found") << std::endl; + cout << "\n2. Testing search:" << endl; + cout << "Search 'apple': " << (trie.search("apple") ? "Found" : "Not found") << endl; + cout << "Search 'app': " << (trie.search("app") ? "Found" : "Not found") << endl; + cout << "Search 'appl': " << (trie.search("appl") ? "Found" : "Not found") << endl; + cout << "Search 'banana': " << (trie.search("banana") ? "Found" : "Not found") << endl; + cout << "Search 'orange': " << (trie.search("orange") ? "Found" : "Not found") << endl; // Test startsWith - std::cout << "\n3. Testing startsWith:" << std::endl; - std::cout << "StartsWith 'app': " << (trie.startsWith("app") ? "Yes" : "No") << std::endl; - std::cout << "StartsWith 'appl': " << (trie.startsWith("appl") ? "Yes" : "No") << std::endl; - std::cout << "StartsWith 'ban': " << (trie.startsWith("ban") ? "Yes" : "No") << std::endl; - std::cout << "StartsWith 'ora': " << (trie.startsWith("ora") ? "Yes" : "No") << std::endl; - std::cout << "StartsWith 'z': " << (trie.startsWith("z") ? "Yes" : "No") << std::endl; + cout << "\n3. Testing startsWith:" << endl; + cout << "StartsWith 'app': " << (trie.startsWith("app") ? "Yes" : "No") << endl; + cout << "StartsWith 'appl': " << (trie.startsWith("appl") ? "Yes" : "No") << endl; + cout << "StartsWith 'ban': " << (trie.startsWith("ban") ? "Yes" : "No") << endl; + cout << "StartsWith 'ora': " << (trie.startsWith("ora") ? "Yes" : "No") << endl; + cout << "StartsWith 'z': " << (trie.startsWith("z") ? "Yes" : "No") << endl; // Test getWordsWithPrefix (bonus functionality) - std::cout << "\n4. Testing getWordsWithPrefix (bonus):" << std::endl; + cout << "\n4. Testing getWordsWithPrefix (bonus):" << endl; auto wordsWithApp = trie.getWordsWithPrefix("app"); - std::cout << "Words starting with 'app': "; + cout << "Words starting with 'app': "; for (const auto& word : wordsWithApp) { - std::cout << word << " "; + cout << word << " "; } - std::cout << std::endl; + cout << endl; auto wordsWithBan = trie.getWordsWithPrefix("ban"); - std::cout << "Words starting with 'ban': "; + cout << "Words starting with 'ban': "; for (const auto& word : wordsWithBan) { - std::cout << word << " "; + cout << word << " "; } - std::cout << std::endl; + cout << endl; } int main() { diff --git a/trie_simple b/trie_simple index be4794098d9e5ec613c62f5818992c29ee16b355..b2a9ecc7fd20ea5073f4c7dbca8305d34aac250a 100755 GIT binary patch delta 10654 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 delta 10094 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 W>a9^)_a=Ko)v@iVt={I;qW%veElG#~ diff --git a/trie_simple.cpp b/trie_simple.cpp index 91f8881..08fedb5 100644 --- a/trie_simple.cpp +++ b/trie_simple.cpp @@ -1,11 +1,9 @@ -#include -#include -#include -#include +#include +using namespace std; class TrieNode { public: - std::unordered_map> children; + unordered_map> children; bool isEndOfWord; TrieNode() : isEndOfWord(false) {} @@ -13,20 +11,20 @@ class TrieNode { class Trie { private: - std::unique_ptr root; + unique_ptr root; public: Trie() { - root = std::make_unique(); + root = make_unique(); } // Insert a word into the trie - void insert(const std::string& word) { + void insert(const string& word) { TrieNode* current = root.get(); for (char c : word) { if (current->children.find(c) == current->children.end()) { - current->children[c] = std::make_unique(); + current->children[c] = make_unique(); } current = current->children[c].get(); } @@ -35,7 +33,7 @@ class Trie { } // Search for a word in the trie - bool search(const std::string& word) { + bool search(const string& word) { TrieNode* current = root.get(); for (char c : word) { @@ -49,7 +47,7 @@ class Trie { } // Check if any word starts with the given prefix - bool startsWith(const std::string& prefix) { + bool startsWith(const string& prefix) { TrieNode* current = root.get(); for (char c : prefix) { @@ -74,14 +72,14 @@ int main() { trie.insert("banana"); // Test search - std::cout << "Search 'apple': " << (trie.search("apple") ? "true" : "false") << std::endl; - std::cout << "Search 'app': " << (trie.search("app") ? "true" : "false") << std::endl; - std::cout << "Search 'appl': " << (trie.search("appl") ? "true" : "false") << std::endl; + cout << "Search 'apple': " << (trie.search("apple") ? "true" : "false") << endl; + cout << "Search 'app': " << (trie.search("app") ? "true" : "false") << endl; + cout << "Search 'appl': " << (trie.search("appl") ? "true" : "false") << endl; // Test startsWith - std::cout << "StartsWith 'app': " << (trie.startsWith("app") ? "true" : "false") << std::endl; - std::cout << "StartsWith 'appl': " << (trie.startsWith("appl") ? "true" : "false") << std::endl; - std::cout << "StartsWith 'ban': " << (trie.startsWith("ban") ? "true" : "false") << std::endl; + cout << "StartsWith 'app': " << (trie.startsWith("app") ? "true" : "false") << endl; + cout << "StartsWith 'appl': " << (trie.startsWith("appl") ? "true" : "false") << endl; + cout << "StartsWith 'ban': " << (trie.startsWith("ban") ? "true" : "false") << endl; return 0; } \ No newline at end of file