From f0520b9b7492fcb88b83c2a1906dcfcf8a86433b Mon Sep 17 00:00:00 2001 From: HuZW <1836999576@qq.com> Date: Sun, 25 Jun 2023 19:21:37 +0800 Subject: [PATCH] first commit of radix_tree --- APP_Framework/Applications/app_test/Kconfig | 4 + APP_Framework/Applications/app_test/Makefile | 4 + .../app_test/test_radix_tree/README.MD | 34 ++ .../Snipaste_2023-06-25_11-12-56.png | Bin 0 -> 10487 bytes .../Snipaste_2023-06-25_11-14-42.png | Bin 0 -> 10522 bytes .../Snipaste_2023-06-25_11-15-10.png | Bin 0 -> 27400 bytes .../test_radix_tree/test_radix_tree.c | 457 ++++++++++++++++++ .../test_radix_tree/test_radix_tree.h | 131 +++++ .../XiZi_IIoT/board/k210-emulator/config.mk | 1 - 9 files changed, 630 insertions(+), 1 deletion(-) create mode 100644 APP_Framework/Applications/app_test/test_radix_tree/README.MD create mode 100644 APP_Framework/Applications/app_test/test_radix_tree/Snipaste_2023-06-25_11-12-56.png create mode 100644 APP_Framework/Applications/app_test/test_radix_tree/Snipaste_2023-06-25_11-14-42.png create mode 100644 APP_Framework/Applications/app_test/test_radix_tree/Snipaste_2023-06-25_11-15-10.png create mode 100644 APP_Framework/Applications/app_test/test_radix_tree/test_radix_tree.c create mode 100644 APP_Framework/Applications/app_test/test_radix_tree/test_radix_tree.h diff --git a/APP_Framework/Applications/app_test/Kconfig b/APP_Framework/Applications/app_test/Kconfig index 45df5f5d5..ffadf9c6b 100644 --- a/APP_Framework/Applications/app_test/Kconfig +++ b/APP_Framework/Applications/app_test/Kconfig @@ -240,5 +240,9 @@ menu "test app" bool "Config test soft timer" default n + + menuconfig USER_TEST_RADIX + bool "Config test radix" + default n endif endmenu diff --git a/APP_Framework/Applications/app_test/Makefile b/APP_Framework/Applications/app_test/Makefile index 1cf919846..7625e7111 100644 --- a/APP_Framework/Applications/app_test/Makefile +++ b/APP_Framework/Applications/app_test/Makefile @@ -101,5 +101,9 @@ ifeq ($(CONFIG_ADD_XIZI_FETURES),y) SRC_FILES += test_timer.c endif + ifeq ($(CONFIG_USER_TEST_RADIX),y) + SRC_FILES += test_radix_tree/test_radix_tree.c + endif + include $(KERNEL_ROOT)/compiler.mk endif diff --git a/APP_Framework/Applications/app_test/test_radix_tree/README.MD b/APP_Framework/Applications/app_test/test_radix_tree/README.MD new file mode 100644 index 000000000..9f11d83ab --- /dev/null +++ b/APP_Framework/Applications/app_test/test_radix_tree/README.MD @@ -0,0 +1,34 @@ +# ##请填写赛题题目## +一级赛题3 基于k210-emulator实现基数树并测试验证 +## 1. 简介 +基于矽璓模拟器k210-emulator,实现基数树,并编写测试程序在shell终端打印结果, + +## 2. 数据结构设计说明 +radix_tree.h头文件定义了radixNode作为树节点,MAXSIZE为一个节点的孩子节点的数量. +radixTree中定义根节点 +typedef struct rdNode +{ + char* str;//存储的字符串 + bool exist;//当前节点是否是存储的字符串的最终的节点 + struct rdNode *child[MAXSIZE];//孩子节点 +}radixNode; + +函数: +insert(char* s):向树中存储一个字符串 +delete(char* s):删除树中的一个字符串 +search(char* s):查询树中是否存在字符串 +height():查看树的高度 +size():查看树存储的字符串个数 + +其余函数都是辅助函数。 + +## 3. 测试程序说明 +测试函数为insert,search,delete,height以及size。首先创建基数树并插入字符串,随后查找,在删除字符串继续查找。并且比较删除前后的树高和size. + +## 4. 运行结果(##需结合运行测试截图按步骤说明##) +打开menuconfig进行裁剪 +![Alt text](Snipaste_2023-06-25_11-12-56.png) +编译项目 +![Alt text](Snipaste_2023-06-25_11-14-42.png) +启动qemu并且运行Shell命令 +![Alt text](Snipaste_2023-06-25_11-15-10.png) diff --git a/APP_Framework/Applications/app_test/test_radix_tree/Snipaste_2023-06-25_11-12-56.png b/APP_Framework/Applications/app_test/test_radix_tree/Snipaste_2023-06-25_11-12-56.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa12ed92cf9a5a0d3ad08d8166ab7eebe53955b GIT binary patch literal 10487 zcmZ{KcQ~BUx9%W%5G|s2f+SjWA)*sR9erdF(UK5#bV>9sdJQ5NO!P2HMDGzTgCSu= zZ^P*2ev)&3=XvhA_YY&9`M$mO-fQi>*89GDM?TS2ryye@1A#ykni?twAQ0Xk;QJs6 zKJY0}mF5rpBYmY|_8J7D?7aHJOA(@E27aXWP&M^1eEH17`>DG<$nb^ZtEaC$?5!Av z(I5~9NK-}0$R~R<=Vb)9L+*T#mX!F6cz4*dueyDPl$k^w?JlO3(`wPyC410=u6J}6 z5=wrro_p0uhkT4Knu;*(fI)l?&6zv%Ey_eYdt@1(nnr)Ay^Z0>Wtbwn%|C24;O0QG zG0MGAZM^aAhs`46X8P7`;j;aPyiZ2PR!*Ldt?Xw|bE}gFZOdTnm~njWvLWf%{XTL- zu=eS>0yXc8+0lXOU%vaDyO9+IA2h||;z^$=f6~#RiP%t6a<=z3f<}ts9!XiHE_=M# z4729MmEIEp$RaQjQxxaEmJ>Xkk0i4+4!2}cm|g`O9%-?sqhpV`~GtUb577>Rmzycy6E`YVp_vl*NZe5*tX{#TaNek2 zb*w5PVP-e4eqaw;ok!4CW z2i_>EH7%2n!*G0U`o5R)bBmn!(l_-D_9SAdDTB%Nn!`5gs9^i( z<-oR8OEbj&#rgCO*h?8Pn`b`y+tQN0)Wk_)^^ z%Fk2t^N`v{BggCNZsOMS>cV9B?B45>P#+ERA&V3Oiv!VT(WP1xd8C%VD8W&U z?Q-`fzwMKktEjAzR!*p`@fYo0LA)RKx|0?07;VO6>s?{=OnlacmyeJpiAyI2&UVhE z7y0~8a|F81r;SEZ+(?3tp>zNA6d4sQYkJ7dqgvfmkFGN)HL7vNUR;+}#p5vPTocS9 zzVz!f1cMWMsF*(0v{lTqHz#~?3y+B4(HU7!G5=`3_Czpie)L}fJ!-`#fjYss)U+J3c+no# zHA7)@B9Rdrz-Ob>YK*i}BG3wMZ!bwGaJSxkveQO_yEU&^=A0~N4G*FDR6Kclet!AP z%OgGANiqvntMctxm~772A=@*#Bq~zSvQBfDi&o|N!KU{9zzAYMeQHS<5tTMeADC3U zTv}goyZ_*Y_MNS4&#sCh`mWSs!Kj77c&*Ib2CbQ>0+Z?YeJ4?zy^VL!^Convj9Z%T z@3*XAN^hq~ew5-})<~JAH#VkIh3i}AHCx(ukwyXjW)&5pAF{TpgC z{dvb~*Mr}IlJoR9AcUYhY}ZjB&<$n|h!xlITJx@eH|xevJdg?{2A+WECekp&+u6ev zrjOm%8LLGtO2}Z1b;j=BU9RI_xbERM73kw(rOR1p`U8ZT5MNueOGQtXmE=Y~Y(f&wwY+PTNI9CebtCkJ04xLOUF)#tK zKnKSUIbw6)$lTxuJr0eALDr-l{)L|5~1{3w`TBFN2@azRo{nq3< zu1S3LeeMzYZjVX{`uBzD!>9?$VAEt9FioAWi#K>FceEv?DLRjNM*VM(QF zndK)t!`h!=x*qnKwVC`EFZv?!8x2eh!Rm%Q*9F!YHvu@2Y)XN$(D7$V7d{vU(j;1a6mkF63R1UA61-u&mhkfP^U20 zo7+`_P>~ju{}SLbQI^EO1F?1*COR!f^wBUgCWWm@b(YKXC06!*9HY)o$a{KuiB4ze zHLUSVc^k>MJ{iZ3##XSS)@DPZDL4b5U2_dJF%3An2!Bsv!`);$PnbXR`0m)~eH)zq>ZAOH-}wYS!lEU5G{uG_BlS0ck?6Tc+(FQ3Vl5!4Qh>E{p(r+h8q z@$$ax&S^>X9W+Z5Ga(MIKziyxv$r)D(>OkM8B|oQD!(I4jZd!_*gCL2Y6tIs8VQ&- zy{z3Gcto5I8u>~nzFLo zk4(47x|Q_P(42nf{S7$9dIAF02X6V@XXN|Ch^_qO)%pg3lEI$9P<7;6rL+3<26N*A zI#1b!e0ncriW_=k#eCdF%Fs8UXufQc(#7m1faGe#e4UK5s7}uX81F1Lzg=bEsj_JW z$_q1g;&TnRe1@Q2W`DR9d+vJ)x}nsR8PWbFchvU@rEs%NvaAfFng`GO6`nWhrj+(j zP!z#+cgj-cL}SLpOecLwM};+@?f#Jy2}6WfWA;rkyE1)T^tUOLWbE2Fhtzdd9v?_@ zTs*2+pVjoU{9ZQan;ZpUyi-EWJL%%PnYVs}j@LH4mhUQ2m@Eed&F8FX&T1@0e`tuH zYKAAd$i3$LfW_o84DWJ=@Z3~+SRUpAthEN_#A^~<1*h{CS`ONE1agiNh8@OChUb}I zH0q>1e`TlTKcpf5^BAZ%91z^t3xlH3>)W@3!X8T)wOQVjNR~xc0#(|)yC~#kIb@8I zHurj}r}Z}wFd*SwrfNxajI_aB+Wf@yT;&fxgH(P{aib6SUof5Z9A|NQnJ zAba0;J@C_I*$b*i;b?m6;@t$*=tc-S%0Daf3P|G-#Or|~w$M4em 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_radix_tree/Snipaste_2023-06-25_11-15-10.png b/APP_Framework/Applications/app_test/test_radix_tree/Snipaste_2023-06-25_11-15-10.png new file mode 100644 index 0000000000000000000000000000000000000000..0f38583b725c910b419604ef07f97d8dc4b28004 GIT binary patch literal 27400 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⪚-(Bhi`77; z_%*K%te8OVR!&4!()2AfYJI8W5pCX`VJb>q@-#ke$5h#~w;g-jCA!X!*EUGx)S#F| zb=pquH}?ep>;ynwt7Lcof$v=v_jepBFvDN* zsPIQ9IwzO{a(Sb)R;nplkmV3_Br}V`K#$EB=ang>$xWTC-XKyQMEkL7N}I2KBg}cK62MC?uM4d z@P=kba$4KEzA!fY_Th;sXQKXHY}CZQR1OQLWW22lh$V>BB}G#KMa&@SDWuSr>m-eF zpLln=Oe|f>uhuAU^vy;m@+zQR6Fmn4Kiaf)Ku-k8uo z%r-m`B}^Mbh&3QMJ7wixk3~_v4Jb_CnldQKcHqikDiCh*P&G26g>lWoj?`1F+Ws2mR%S+x6iP%%F!9|ic+ zZ-=nwA2>h51*yV&gF%az3Y_Hf=?wM~W;+jSc|cMz>rzdxepLt?rze5HWW;pH1O14rrEW22QNrK?y?y?hAK5|F2w=E_-Ac^mL;RWtKA z(n-(D-Gzv$EO1iw5-?3f)Tgu}j#M{gNmV!~jX zH5D7rq}gk|q-ACBQ6a_y{xqMMwNO1FmP6QXUKnTjR4O3yF%Sti>oONOf;D_*rn*4< zmp-2ujMy7+d}QA)?Sj{}Ad2QZS546A79RP&@>bGJ`%^8wF+AvA%tMrew;vv8Pl`_ZC|M08f6a(jlf-N*yz8VK>n~}4@gd9IP!pFCL9?=p zDxa!m#1Psgv&|bp6C_R!9^AC0dWhLx@^YOFL#kP)=dHZS_?Kx9eTR4bpCYnmu4di# z9vxVoZ^(uCmGNL6u@jkW@icGD{lxSEhK2UOaZq+IQDV|PNERVYXa?^BXC?=S^F1F&l za$xdC=zQKz5DluZC4CtT9UhaCwNZuRF^HARjm|!xsai7~P{D-JrRAh!D-;fwINSyg zVZ&N^FxD|qqYorbRt+@D>=o0=3m z$vMlEQwPaX?%-1}d|8U4M9Yyr1dw@GrGq4Ndhk29mI5AdAk9$fFE{2j@?_3byj0d9 z0BS2hvIJ@Be!K(j!iY(@e326%|tG(wgSl%a$@Z*s(` z<3mDF>n0vsF-QG$j1Psb1o``4?qaaF!31qgBVB-t&FbEyb;*e;tY<1A&s&!@8ZhV9$-q_o(K%+XlvnI^ zoO8~a&Ip6kGv=}=C2209eY=?rmm%VHHPGEgac(jE^#qMLI9WZh`&f?+XI3RmISIr9 zHtw1Qt=}c6JC1mm)gs&%CZsFc;&maE?2@e{Sw+?*Vo5fMUtTc~w~! zovC_2Idwqd4#Rgp%X_z`-b`AFE?mP!E_yWvFHRK5Df?pU&gQ0iNyCL-@n=UFI%Vpz zl8;g+ zA0H%^(2XF#L>l?a_&1^Coc?%%#r^~zUXh4WL|-|IExMl?C(>gz(&wp+>p^P&cnUw| zj_sx|E&iyc2|e%$?maY0og7wP;_sr4I=PP2rc*#YOIt zTAt-;NQD&y55%YWz?4Hu;@F+ggvXFA50RChlHD(Jyrcs;nGsI89d{ThaEJt15*?Tx zw`sX{VKd9uaq@1aA09o}VZOI60&@|itA$^WBYlyDv}i>9o!~K%+fmiLs^Z%o1-W)9 z+-sb?Y#a(;wVm8_>FqUF2;C0uIV+nj6=rQ+d=g#QFtFE+Yq#6X`u|B(qR1U&N2r&01aJ*1O5_doHBwv^{MJD-A%&*stGpWzMsQ1htB!5$sl6S-cEbcTXc{Vp-%TPE-5e>AAEk6F)V+I|G-j+XjFsBw5dcWhJMQ)vctg#3fVaiB!GA>QZxY-bvr z+J;ZSxOzC#TrDMd~IX6rd*a3K2UGtbs`$vJU*NhFWllatbM6sGsWE-4c402gnDL zfsN&pS}l~!YY|vg@QC=)hL^|<=>~fpi_9pzaM)fz&cIHWe!ssF-CbeG9Oq!@b3T#V zW#$7rL}y+eSiliza#o#<7^4r2IVCZm7tA%w6Q@p;7f5p89dr5?wUEJrd!xxhTBvTG za}c{-{`O`0WWJTxt?8Dh0_k+oSr83iiFte&r^tQ&cX5{_=QW1|v7Q zrKJ0*pn)~x#d-vz+kni4#wHW%j%}7&C#FYNr~*A+_Tym`=SJn+)6UF8ueVg4lW1)Z zW0;!Mo&_xke!cW}bMpTsJ@4Biu&|Tf8aXj@-yOcY7%b>`dJ%3=G4UeVeSL$!e}YZ0 zr)JVb7=YlTZnLK{xBzkZ`}&<0XX31DU)9H)XJ~~SPg~BaJ9mOyUF20yUq1yb>1!S`R6zqQzzaaO3q_!i|) z&0dXtKVN_e8yEK<;P%jD1xMZbn#lCZvVjZQeix)9jh3-UrAtZ0){Iq@2o=m?=6Zf+hYoS+lcP84A<+G)V?L(Sqv^;niaN-F4G%CZ?Y}1{?U$GH~rtMR6T@OU$u`0aj~t)E_1tU@2W+DMQJp z3^1sAaj+=ZaMzMyOwSN5asZp7c|J%An=3rh*+PlHuU!A_&Y9h8l~i|CPrCmPq;ykS z#m4Lh5=TWN(AOXC49;`57#d_t0kD(>nPX0>cFWDWqY+pl0R%EYkIkAV_%o?xN9sI9 zMD-D*h)Dd$ZCMPPCY>iA`Ak0A)v9!gxLdx9v`~X9mI$L|KywdW3y#P*CGT9@TBzax zw$!MI4nCGagn}K*+P~Ncx3U^_O^-`{fV5r|pSBbq zu%I-yb6PL37ohO5sI1$gc9&!v?ohA6g!d#l*dd7}lXAXoK%5`7C(K>;CPL1LqQ zw#%~t%bPWVZscCBCTS>4g_Yge@K`x6&pV4YH0IRY$4J?+Vx4V5keAuYs}* z^!$-2ioOyZ_8-|TrH6Gk`SNd4OUi!=kx3hSHL9hSq{IVdIb2)Vg*^vkDyV8r-3DhR zRE0f8SCw>v`NYlhdQq*T-0jvv!RH{>MWa1!Y_-`2j19ykaX&Yw&X(kM6U+y#2Xzt{ z6z80~6Cy>q*G{#!7OnK1yc;|9=LQ@XwETd9DQEKCQLg$B3R!C-v<&gKE%xO76c!y? zd3@?O?gX5ek__;8m9sox+sK$(Y*?t!DFJ!6SIiw|XkYk#6QoK@2>a!ZcjJyP?SZ&@ z!BVTaegtBG$2D;~qxWv5+(R~1nlsF#F_F^?sbmk?nsZs(vb`I~$=fUf%?9C7(f&Xn zARX@rsm?oF!0|HqL=up!$#hm|W~(cF z63HuDxu=ZqupjFpS-b)_s1gSJl%p+*wlirPQEWT@?*>hm#q|Hdp!t>YM**;G__D^S z;QVxv8~juQ;#~AX1WnRz`nfMFx8Y;fLp+PY-nnNkdJz9Rke??<7G#x^*q&Y#!cn_eYxTqmfpt@yMN-E{Xp}jz zKY~-A7JDF@)(wOZC>J+i-86V$hZ)sRw3RN40EJqM|^Lt#zg<)#;T9JzwUthX-fr_9+W-oK5?U0ML zLSPr;{a=MdpXZ?2E;7hN&M#W?iCLz?)q1bzAAu!JppeEs!9~VdX-%}HgS)Hb)TqXa zh%fyH_=+4xpBEov~L>kli$t1ncIL~g_r*YjyoqKW-HQL zY*k;5@XU0LlW)ThgU1gdJbH!jKrkulxUc9_?UnGCsWH2U|o$km}jSrXr7hUGh*3=L-hPimzD8L%i{^W)I^)R_0w zBS+rrB!|21a)R(}_6A6Qu`f3+K|M_rU&=FC8?%6i+kWjN`8SpDr8q-%(55OH8d(29 zs|zarw(f4w&~-m<+(RawNVbmqU848BRN2I6vrF) zIP_t$Kl&ncS{-#1Qkp#Q!c`Lu>=TvO(S-6fp+v6C*1dFG>ud6F2Wy*nN|<+9o)wd} zZy#XGd7a$4a>RRzDO;(h;r;!=kgT&@Dz~@s0Wir)MNI9{*R6(AKIa707f%?1VAtLM zoT$55`WznLf+4ss4(EZRy4jXYB{X>1W)D%cL8R;H?n!#%sRP~}y{Vs@2AFUY16_0B zEB!anE^8Y%K`j1o8j)V*lBzV2Pm}CT$~`sHO;!T0_c~X876KYcv3DT}*=$wmmTGwv zFc!S^Y`YF?g9fm;&eHqt>yIZ2Rdhy9RPWyk?*Ru}reVbcnj^S&Ru8r|>#QWt%SJXS zWl}oPg(IJp{uimr{~zk|?<$q&as9x)>}z>eCU_C3Nz*HqdH%NDn&Rj}x4R1*shR%3 zqKht5*?BEnIbkK+`J3#qg73M8n$`tv`91aN@;wIQ*1OA^uyHPnyBQHz5)}t?GshY6kl8Ss?pZ+!`F-t^xwQhN2$7g zk!mRfe*XSrZwnDcq-ENLG3=Z(-`0{2@z8=$3%!k@o8C57=154IQ)%uTHAkneO$moq zk~8!HS|9%KzR8x-^Ns<8#82sqesWEBUs8{%X;y7yc>EEVuhTTzN&O(A%q;|=X`bLW z%a*C6t&3z$blX@;_+qv$FR20V?EXkiQPv|0O5>EE^fAGY(2QU?7bo>-vv@DqYulG$ z*EiMy2urv6gH{o8yHVUm-!?*9XEMYm*dK=i$Gx;_m6ddODkvwckczp}umR{CsZ?s_ z-SDBG#JFgl^9TzBu&kqvNya?Hpfb(p+;W$>?R&zbWOHz*Z=jG4(5DwGv79!h15#PS zsg6SdMs$y8a;*_E!VjYQ6@c($_^jBBK(bDpom)P6bcJVdt00TBZU~g0qzf?jp|w`w z2MhScW}*r3nyfieO$#trS;y1%IQ|Gm%}ms6#b?l|;KcrF`M=X0P1VE^h2mWGHFaoa z{6#UZ#e!-Vb)%{j-{m4u^}(I;`6t@$+`pxTw$HewwbU*R+za6|`EClDI8*1mT;y=g zPuRB9gRIrmdT{f{>@;y-$Y32cEZ26sqawDyhvyXu%c0fl{H5{_Ls}9}=&F{F{=a<6 z3WKltbHc`=^Mi9#wVQTh2p##}4gF-bMS#Uczhc>40d2gqG7rx`=Nq&!wiEI~F&>_z znMHaMic|}R-$aY3N?d&TKxlZL^(-IaCL{7g-&{BW{kMW~yE{iR+6@~8lJ4(~R z9CzMw-^{hhg&%@Zks#ir>)*4&7lY52e<^GECW^0IK4ka)YZNv6>lLGD1-_qP9^5 zrXmp?=0D=L!uFzX!H7tw$RK0diN1VxTjd0!8h$N%_Pu8bb!R5K>@Ph^(50%+_kglw z$^i5tp>P|3Re^9)o3 z_xm=-sSb^H=b66`9^j_;T4>|wG~U_smFqqDDvho`C_zuGrqDa5Hw5zqy?vkD{57*8 zn=Y%vdJ4AMiP1s6CRFVBI#7w;&0QX?qOPH#qWb#;+J2c@y*|V#5@#K&b|tVTGZDx& zjuPqJBY9!6-$@`pY(ek7DcAfpd6wJgeAHFGfYNLl^N$M|E?JAlJ$N}#B-dY zy2D>OlM_$}rR)c$4^P>ULn>xk@JM!RbVpw8N2V0nr1uG?;1(lf7EA+}fW~VNXyBOJ zehn;&N5%>Dx}YSF8jRZ(n;aycc=@_GSdpgl^dF$W9UN#Z?!X{`@TF5Xa)IT zl**K#k5TZ< z9KbCuh_;*K_tca}Zq;a8^V6c!v0^}GF6`3~5YAOX$_96uE&RCfPx)ac1b$ucSqSMT zsY}#@7Pgdw{?w&PMlGLVN&M0bwZaijy=Y52XV#I;KPr9bOqiSL7=FZ>lqddMeWvX7 z|3p71*akJ&Dd_T_V|KM!4SQIB6w)hu$5xS_+V$hl5+debY-6NaaPkT!04m(o0NwYt! zo&_IKxCNZi6*27=>>mXC6l~Mf)fAIs-Np6H@u+;H^q=@jwc$DwV z!tn2fnBxRhtLN1`A^%d%({s}YRllz#7g<-?~>5wVhvTd%2L)^1ZE|!Kt{r)+sJX;ihlrI1`5+N76%9 zOr%|*TJ!7Ps%PsP#|wt@VW?125IB9N1=@NUOU}^Eca+zY_#6k?n}g5Y z@FJkD2H;lb0m1od`*}C3(q$q51}ZhUk`0qOU&vTtb}olaRTq}OqkJvP%ZATHhRl8t zC-3ns;3#riJ>;gYM$PBSXOO8j92(DOwKlDhR2$AA7C-CjfkMcSN;-29JPYY?7G6D@ zFFgy(1|{f7PO8c$yq>ti9S#QR$-;F#7Tl%6T5QL>u7hZI=~{!QUWP{-T^b@;qIL!( zTUix;t?Zw_fzGlSv?agXNm6%O;k}s+-S`{_*7%|M`1J>M^12jL<}%~?@BDabVESq` zl7MqP57{Twa5ei!iRBbe6IoZ&t;ytln!E#)717vFfL(mQji>Lk>ygbM>#Bjet~zqy zamaqVf-Le_n5J9y`y&^Afy@~e*R-c-U~A&haL4jL=|_683n-}kRiZ9i*c?6gem_2k zK9DMpXp$$imwlk>LITGVkW{{=jP{R+so!$%s(z4Da{S=8SN~-ms)9kx_uNV2YIhY~ zaG5Va?zhYXVBocbP5tO&bo~x86q-C*Oh|kAy|V#Q_;hDI5nbz(%o48rDe0`t9sH!m zNmF;W0d^1fcT4X4lV|gl;1@N(h?9*z7#!c@n1@a+dyox;`U*2NtfMCOu*vtYV!XK~ zIq809&b;m?=WfE#5@`Y~BgY;Wa*J3SZO52pwFmsh_OXvTEKDJgEWoYF;Qq}fsie{w zn-3|kTz8_M*>K6<7&#^06W+aZs-UZ}q_wt1d|j-w4X!wuf4tK72Di_z!x+2CcQ2m7WgOv(3f8-NVhgywUrIsJD*IU})Ti3nKsKy*I9dk^Pory&u%v zJA03?*2DWyy{%fns5l@uRnJnR)n4Hge<~FO8HAL~XF~tglz;Nz<1n2lg-UlxHtRWz?ADe|5|FGXDkmCYH^KdPS zl<7C;GXF3pB3PM>u9WPcpSN(~v^#o`QI?2)0GaE53Z>(4>Zbn)J;7|Q!~cz*j>Ty7 z+`1qMesW`rFB+(!=%RKRh6X-TiC*m{uDh_kL7TGJK?<}zpOGSYYR>UAcRSaMkltXM zjGp$~hM)RpSrLwJ!+%>=RBE)(zO{0qJXK(a6lU~BB0YCLZ?}23h0uY<_@o5c}QMsZ@c!OxrpY(9Q&S;yCl@nCJ0qcII_ zmwm`4EQ%TRsDX+5^F{Zd{5p=wS1{`8tKsk-+N z09`Tk6VOh8tX_8D5d_6PI{Z=@MEWZDVtsLwj65uW@2T?R(m2`vX^7EIdY;kRv#enD zZsC^w10#@X!_Z-@7T5fkzm+Zl@+yHWd@~j4H1cHUJ{vKQ2%~c|xE5EKW|}a#c1!ND zY-(n(9cwzBX(;r_J_}r6dO5_N1avA@^`u?L4--(N>oYf_*qn#*c6Yu#R^f=ca6&hh zJy2_exq4A(Ncs1V+tM3wF^C{-ABZX@l@ zQ&PM(`pBm%kzO9cw8Mn9WD>-hV{F~w3;nSc<}HD3n3@CNfn`$_LqF#el#t+lNwcO$ zq;YMYQhEpZBEHuM`jccCYV`q2E_fGSzOsO!uc1d}X# z%p9_v3(=pRN6;hewmriYPegZ?X;wlFKiG#f*=lNaJ+AQ4s0IOSmg2D&IC+q4LxVRD z9}{;&D9BB1h8Q)tv{oK!VZf&!Yb>UxrXAj)lMw%UjGD~A{#p;+MJA2GV2$pISnUG( z;>A;*xsl8l_m?fvP0bvC#E(S(p)0AsfmYR@+Zm!2SB!oP3-r%k#a&%PrsQ?^6{Wuv zL%pcG01YKWxxm3V`+E3#)sw{OVQ~R#$P317P8Oy>O>*#nNsetroonV=z}bDj|thE``WL3|)zzVw~r(j5b? zns`yD)?hA^l5e!m#49c5yi{#D=-ZR}n+nZL;oqo4!^Tox!8qO*tJda=eKHxy zbO9aS&-wrbL;rK2*A9 zbo)zmT4F`tA{h&v3N6{=%j=iRQqPKVqnj|pz8^ejHu~vRRBS<5)}0xsHO<2^req*8 zK(O*q1I#BNq5U*Pr88}bfa}%g(BzH-Hl=+8^Xb7lvJrGU4y{u@~7$#sMH6rUg-_gEQ~{q zx9HRJh^eT2?^B6oI{cK52X}pBd$k^Eq|H@)nHZW@&ii`B{cTz zvTH1jeVZ6d(HPs<$GqosKhJZ#?{^&UcYNP*_``KMubJyQm*4qY&g%p~$}!%LR6g8x z7Cw-+|01sSG(CWc7(Tl^!7;ZvC;M!wz}5C9y%!R_e~%rn`{sHV!XJEIs8^Env-Y3U z3iG947GZeK!REOsvRD^?q&aAfvD4E}Z0!94e?)vrHg^yW;=U}j{ zJ1sK7%8qBXj;B)1uex;A!+|*0QxkcF1nTESl<(%OlexaI&0Idhu8iY)W($SSB(^Gx z(N#j6Jt@|+osfldc*H}aaO}>%sqRhRAftDGqvq9wZDc6~l)4T8KE3y`pSrIsnqZ6Z zk@sXZEMsfSiooDNsC`W?+llDjPzg2iUymsL_{SB0^6Z{548dl$lI(4Y*yrk5-H#X7OZxe0lIld&{R>q8)+c{0p?Z zY*ta_B<}0+@9bp7+Hq}BCV>cHb*c9Ede%#e3!W#bW=PFz|VZd z3h~9spf=LhlDkS`pu4A=muH($*M-Nq4d05~dOjhg*W1QlSDx98;vGH^q4dm8EOM0+ zjJjwWY0%64hcA>Vn>-t0HA|*-9TXnyPU(5YfktX936hVzxB|E9ej3&xUykMP*Do@w zNcsjPXyJVKQqVY<`G?InYA(sEAP!1LIq($^@dZJHC5Y(?O)A1O(a-ZZ%jWqkaaaxK z$_@m_e*JERpzQ${3ts#bIy5~?O`yu~fzm7n=Qdz0$!3%fy=%%*M)OwC(%cZC?7)c& zO){cx6B+ZeGI{E%cUINc7KT{S9S3`1r-0uY10}0|b_`J|@Ok~>o@~oXNbE^y?Mvip z+a!wIXmTXxjf-RrqKm2GxLQAEh1FtWNHg)?31mFdFyQ5DkRkt0ax_v_LW= z1&0xspK|Lfz2BNjqUo~j9sc0JrZu)#ZdFJ_W=^h6Hta?z&j#G?ppJj@Aq!4H6RE$y zpQpKO)=hHoa4|60lnu!(*J~%q-JL|)PXtE)_W1rXEcO>hr~5Axadh!VXJ-K-Bqt&T zMN=d$smmEbJm5NAyB6{vmS<$he~0tr5IFA9o_Y#||v`N3x(MMrcT44WsRzAizZt&Q#STG;VfC3my8vsAoOH z8-9XGF$^pD+T-bDV6<>rI1!C|B%|j#E`LQT*6{*T4HXx_z5aCv91K3uWcUXBR-T%Y7v zqNy3_k`u!}QvY|>F$FBWD3aJ#-X50b@Do3EpHQ{ANH8g;Wfe(e*YEJ229!?UQdxUM z;tuC+X})&pwfm)CNupi6V4y@@ep}8zWh{MCG{xvTeCyXRVX*7kTtw7X`fgiviO&z| zh)Oa$iQjO&0lL0LJgeKr3v;-<{A`aRc;Vpfw@={-M#<{I)To`2_`^3{BYCsVZS4fg zkDF%HP`B58oMksMHE7vcERLIX)+Ud9D$2C0x2%?3YA5#D0!z69gej|BrL-CtjY@|| zjTax2-=`rL8@ire?E8lC-izc_#wdPXcR}TYD@H#Opm)Bj*>dzxeGB9FJ;ZQBWxzk# z3A80kmS(X{laZWT;QfZRgzD%Ry~7Moc6$cX{1;wcWYm5}R1$vK*!6JPrmH#V7=yJC z-{&a~JxR~;@21)hLpw^fk++ZCiyY_mN;lpdF0BGA*jnbtZ#p5#X>!D%eEE z?neqbm`@;2unL@L&gAVLeit}BKNHZmKDHLA9kg->oGwskmj=1RbH~@Ex&2j1_C;!S zsGX+uEUQEm1tQLcT=!kD5E9zmY^v*K2?ZYoZ@5~a1o(`eY@y?An}gTIeP6}Gxa2f9 z_M1|MMsffWJUNJ<{0_4-_m*H(?R$7IwjY2!4D!t9d4q6#$p^Ssz~E4K<0R&3Kx4Q^ zjcRI^&|;Ki_h5cze!f!~9@dPw9t-`z7|NzBnQbBXG{jLm0nh(p_Pyolh0&5VR(uj| zHe}^a)j{`3k;13*_-|53?AW(=)ipf&So7Lg6)$__j$76EjMGIcht;T(-Ojbhn&$HH z;iACF);mk%a%Nf#erpj09;4w?t_zSu3D3ZA0@z{j{I#S3)F6_{EI@N zg-Vm2pB;U3vXCw<$rPNul4CdX%+>ODvn)4AheCT#BG2W`u6FG{*CT8rb^z#hAX4uy zCgv8cz;$L6^)H*`SbE+Vh=jpvXtikw8x`6{y4UCzS`F7D5;Wn;(pnuOGW;73!u7MW z5*%W^XuT}~bzeqyyNE0jOW1Pd@XXx1?v}pWpS{R9|1C)Zf%aX{hq7DzYkK^ksqvp#Tur_Hc+43pH%@iVG#fyuPQ+u31n~P%;0;Pz5cl+H_S$x74e_Ui&E7`b^fl1fvN1R8o2x=Fx71GvxGd%YG1DTc#m4puiD-CwhK)7FQ) zren@cxaO{^9awMu8jOEJB(iv8*gaL%^ed%&mT3x>R45%sNJn>xG*z|l`#?bSoE`8N z5~49L-RSx-B@9@Axz`vaT|WjOm{Ys5EnQ#ZeWIL&6UWg-*O@dl(*tK^FMuAKcwF(% zYxa(;fRBbaAJshG#iSU8+~7*oXAp;o1%%i(+b>$V0s!^hG0kBk6d;x|6O?(Se6GQl zYsc^O(bvj;j!HBjI+=r7$@9?V`trF@acD7-7^UtVN!vXUxZXOkI6t9Wem|gcz=0-P z`9*1K%F3j34BYgEq0af^Z+1gBz0gDPlx(&ZrBB<$iW}~%By}Z{Be=WNRL}iCy8-CM ztN@vnq9bFf#J~KtLcLFz%(KisNHAzL@)d&r>iNoj4f(soLs?&2#_$W}ro;Y9)!}@1 z4kO_`x4I;oH6zuUzVMj5*RuLpa>yFw3{Pc>`6bHubQW5KB!1I>qv|v1WMnb@k*rW@ zJh~S#IRus0SYyKIM+XhhgUkECIDc+}|G)9aUG1$cjwia;Vl2U)Rm326U0X0ySTMtJ zPq!cDIubcf9wzu+-J1fmZ$3gR?p~ihD#>y()q-j>A6d!ber1DSp@^!pn1-t!l(KKg zjH5Xc0+OdmJ@?b)U&YTiVATs6>J?1*=Rid=Xmb=g(uJQz&RtC)_(-AN9_3ivqoG~N z>ur`}1yFJb;VWA(1)zDQfP`Gto0cL_fHtba8n+ON20WiGP#^B~IK%%@e z(H>!;#)HuOaUyOv>5fukP^*JLJU0)ihb|3 zAdq6;QR-Km_HQ6MLw;{ni`XJ-#1-uDecfnV-OR*@FFvy+_0(^@+?_XI@pM=CX`XM> zgB(&goIpL)Um7|yMIDnGLN)Ze?JQdbw)1#D*1-={`D4hZEtG%L?p1f z`XJ8th<^m<0Ciz#a;rmfi*KWa$A|XdL(y#QyEuvhTywIMQBYdCmy=RU&4H!_=H5mM zy;&=5b3py9RG&VGeVioJM#9%C)bMc1{^7N{2F4h&yxKm(mbMp37GPdI46@m?xj%k) zmbqN0l*DSbgnOj3lmomvs{`;V&Ua?nzvX0F(nabnncp`h^AV~U7)$%bt1b?n*xiLBQyG_veCi!=bSN7n+sX^31 z@u)p?`4+L_!GaXKQP;tep7NZi`JQ`~?}1l&LPnwL zDqIhpg#gT@mOx)W=q##%>8mc)6~ZOwKU#l;hVlsZFitpsR>vr ziyz#gewEIgSTJ>iwzBBlC3O@A?3*nM|7&-&oO^IeLms6}6HhU-1k4q4Aups=tjnTGcO&wC?;L z=Ed;Xso3#>QStS9rzJRH+2FdGwN~|{KvB+>|C4zYxNEbp3VXwJE7g87bEvz$+A(lD z9{p;mq4q|zu7es5%w`2RiKLo>X_1sxt`vo=d7U92FTh9;s>ES6fuylv zlH0n%I8oB(6PVFh^DGnmEgw3G(wVzBv>E!=U3@X*mK{*U`uWn~V^Ge}KkC&zH?=<| zquZe@X{aYyXCECo!IKD5-vxxK=H076X8PK)QDXA*}lU zMyzmcpVk-{n4Z!9N5KC-$ubf9A0+GOp?^qLQR6=(i|b^L*<(}bC-U9Pg~Zvx3Ml7k zSS5e%$bN{kQ}XEesC*4kGgPor-e8y+SK3?kb!V-qCpVhPoU(vXd!}0);LdDuLF%BE zHez+F-xF2XY6bIKt+6Mr8wje^`Ta6=q3>M1!Q}A@7Zf)%SetB;_+&@;8jkfVufF7V zh)>@>i&4?MCo>)|5Oz;?*1VrHzLuK7q|zG2%b824(tyJ1{o|{7YTGuNdA0g(&NukP zOCBE%wmNo2OjeRUZFBgMI|rG}BY`4Ri1RWMPn?BJRdmBL9DFne;!`2-um{INKPvCk z6RY+F?7mC%BNDg*+w6p9qFp9hmBqh(o!oN=8ud*$d+7qk8*qMpXkD_tsWfeiP`YuPN8C z-8p#Ih#$W55K`2=j#AIM+wkDG+fF=&gM(M>_o^TUzUw6}zdbgymNwUVhyZF!F#+n# z0~r^(=><4`goV{_!*ai&aC0jjf@T}PASjwMrsPWwqr)lphZSlE{X;Et z)G#6O!}w3{66ThTQ|PCzj5+g|4HQHb=lj4eNi5{3k!K24QJzS=nXg) z%+wn^Vc6L%A}RxD(GNYQA-S0^%>%mh3W5Mbw{NZaj{$tWm}!$&33yiF+MjffXo~!| z!F!nnrlHwJmc?Y+XuS}uu%?r{)Kk-?Vi#gJtyDd5LFlqq&p+~38;btLesrq9Wk*@~ zk1aH2q;Naxs$gj&0#>1H7ZP8+mDaJf-JMYxUsreC>IQFBQOk+@bLWO!&|G z)<8rkWqOHZGZ(sYFWgxVn|3l+$IPFzy&ug5cEx14VDcE#Hpn#Uf+l9YYhM`RNTob= z?`LJJ-V+!VmCSM&7Rk$4AiimsZIh3#bO*C1Lu^5L4lr;95<_`=itXm|o5!=$Gx_k? zXW8-i?r^N6SnsP7tp;)!_=n}Qw-tvK`CfC*sj$;m9Oan&6Dz<7&M?io{1xUHNDOw| z8BBO(>g$({OU~mF=k=ZyP{#UiOm8PE`>L@$sLr>q^|%(mbLJa;LTkPC{SRVudz@aL z07K-tr}ZNFpI;9BD@b?%7A`R~$~|t_y6+Wb#uUccx;>mb{=WnY4z@5*I`K|B9A5=R zD|^=+GV%$TY*jj_nl?_Uf}I7;8=+jeBUf0PUJ;ID>yep@=og3pt=@QI35I{=EqN

?0FHQKyv`#9b%jqv({`mb1Op`9A zC5|D9sr@Pgh`;M|wcTk|SE4_=1t%WOo3UHVm)7hlZqRAbnR^*wq?HU_pJ+6{c2Rp| zax2K>yj8E8wgJsV_a37B*0mIhL50VXs)NC5!f2I!5S8wwCq6z*@Rzxg0tt$M8x74( z>BX-Iwf)1zkmUXMf&7H2rWmtZ8O0@7NguIeuS37so}Esed4fWv-}wk`5X2J=-L7Y{ z*ypHtF*+RmKB%3wV;1u*?)c+)?N7-o%h)S`cwj(fT6fpjYoY3oDs0Ja|IP24?qET> z4H+ME-}GS?CC0xs1byg9PBz@1R4yIDTZzF?) zWl9*UmxfUsCEL)1FoxE6IA@>rYU}TI3Z~2(bP7k-sa(fNE{XWMRGA*=A&KrNTk&8p znr+9u9mc;{bBY$32H_Rg*!2b?`395Al{{Y(TmE(FFIKP3*<=gO=xTNs?=qk3W4!#x z9c^IobBaBM2#72DX`*b}&KObiiNIhUXe8dWoI@?_Uy<|~x9it`w zx8AVpfzQs*Y+349YO)ouzh_o&tzR;)9!r0?Cy1bmeM-BIY8Yt*9Io`T)4i|ZOWYT# zol+u20>cNHeIdKj*u=Of zhl0^)_$%e`Q=~j>uxk)2DwW$+*uXgxk4@$!puUe$2~sBFI&{0~%}@ynG?#;k?>+n& z0{EJzb&qb-Xj4za_9LT+gMJ%MI77{%as1C@v*Fv}=4T(s%SxkK5w+~cGwvnz-A0>V ze5RBMHTA6#M?R(LIB@}7{kwcf%DN8=@)2v}VDd!iU09O{h-NYh-`F>a&}al%y88m3 zYWleFgnbaK$jiUVdCC7N9F3D-1=B9V56nfE9mYA0JiNjoXbIL zGR&$^B-$NF6N?0MA)8hTAIIgjNtJ=`WiFj3;TOY~)MH5b5*0|>6NDK?FbL(OeU_8Z zlh9-^q&1&?1;W1WbCX2?E96Gl7XBK3?rdxtmE zbrv9V +#include +#include +#include +#include + +#include"test_radix_tree.h" +#define MAXSIZE (10) +#define ROOTVAL "####\0" +#define END -1 +#define BEGIN -1 + + +//创建根节点 +radixTree* createRadixTree(){ + radixNode* root=(radixNode*)malloc(sizeof(radixNode)); + root->str=ROOTVAL; + root->exist=false; + radixTree *tree=(radixTree*)malloc(sizeof(radixTree)); + tree->root=root; + for(int i=0;ichild[i]=NULL; + } + return tree; +} + +//从树节点创建子树节点 +void createRadixNode(char* str,int index,radixNode* node){ + if(index<0||index>MAXSIZE){ + return; + } + node->child[index]=(radixNode*)malloc(sizeof(radixNode)); + node->child[index]->str=str; + node->child[index]->exist=true; + for(int i=0;ichild[index]->child[i]=NULL; + } +} + +//创建节点并初始化 +radixNode* createNode(){ + radixNode* node=(radixNode*)malloc(sizeof(radixNode)); + node->str='\0'; + for(int i=0;ichild[i]=NULL; + } + return node; +} + +//判断树节点是否是根节点 +bool isRoot(radixNode* node){ + if(node!=NULL&&node->str==ROOTVAL){ + return true; + } + return false; +} +/* +//判断两颗子树是否是相同的 +bool isSame(radixNode *node1,radixNode *node2){ + if(node1==NULL)return node2==NULL; + if(node1->str!=node2->str)return false; + //uncompleted + if(node1->len!=node2->len)return false; + + // + return true; +} +*/ + +void insert(radixTree* tree,char* str){ + insertChild(tree,tree->root,str); +} + + +// +//在包含公共前缀时,插入节点 +void insertNode(radixTree *tree,radixNode* node,char *str){ + if(str=="")return; + if(isRoot(node)){ + return insertChild(tree,node,str); + } + //计算公共前缀的索引 + int preIndex=calPreFix(str,node->str); + //节点字符串包含插入字符串,当前节点的剩余字符串,需要作为当前节点的孩子系节点 + if(preIndexstr)-1){ + char* oldStr=node->str; + if(getSize(node)==0){ + insertChild(tree,node,substring(oldStr,preIndex+1,strlen(oldStr)-preIndex-1)); + }else{ + //存在孩子节点的情况下,创建新节点 + radixNode* newNode=(radixNode*)malloc(sizeof(radixNode)); + //复制孩子指针 + for(int i=0;ichild[i]=node->child[i]; + node->child[i]=NULL; + } + node->child[0]=newNode; + newNode->exist=true; + //划分字符串 + node->str=substring(oldStr,0,preIndex); + newNode->str=substring(oldStr,preIndex+1,strlen(oldStr)-preIndex-1); + } + } + + //此时插入字符串的剩余字符串需要继续插入到孩子节点当中 + if(preIndexchild[i])){ + insertNode(tree,node->child[i],str); + return; + } + } + //如果当前节点的孩子节点没有找到前缀,则新初始化一个孩子节点并保存str + radixNode* newNode=createNode(); + //strCopy(newNode->str,str); + newNode->str=str; + newNode->exist=true; + for(int i=0;ichild[i]==NULL){ + node->child[i]=newNode; + break; + } + } +} + + +//uncompleted +//找到一个字符串是否包含前缀 +bool isPartPreFix(char* str,radixNode*node){ + if(node==NULL)return false; + if(strlen(str)==0)return false; + + if(str[0]==node->str[0])return true; + return false; +} + + +//计算插入的str和节点的str的公共部分的索引 +int calPreFix(char* str,char* node_str){ + if(node_str==NULL)return -1; + int preIndex=0; + while (str[preIndex]!='\0'&&node_str[preIndex]!='\0') + { + if(str[preIndex]==node_str[preIndex]){ + preIndex++; + }else{ + return preIndex-1; + } + } + return preIndex-1; +} + +//计算char长度 +int getLength(char* str){ + int count=0; + while (str[count]!='\0') + { + count++; + } + return count; +} + +//复制chars数组 +int copyChar(char* str1,char* str2){ + if(str1==NULL||str2==NULL){ + printf("copyChar get a Null"); + return -1; + } + +} + +//截取字符串,从从start到最后的位置 +char* substring(char* str,int start,int len){ + char *res=(char*)malloc(sizeof(char)*(len+1)); + char* temp=res; + int count=0; + for(int i=start;iroot,str); +} + +//删除部分的代码 +bool deleteFromNode(radixNode* parentNode,radixNode* node,char* str){ + if(node==NULL)return false; + if(parentNode==NULL){ + return deleteFromChild(str,node); + } + //找出str和当前节点的公共前缀 + int preIndex=calPreFix(str,node->str); + //当前节点没有公共前缀 + if(preIndex<0){ + return false; + } + //完全匹配 + if(preIndex==strlen(str)-1){ + //当前节点没有孩子,则直接删除 + if(getSize(node)==0){ + for(int i=iter(parentNode,BEGIN);i!=END;i=iter(parentNode,i)){ + if(parentNode!=NULL&&node!=NULL&&parentNode->child[i]!=NULL){ + if(parentNode->child[i]->str==node->str){ + parentNode->child[i]=NULL; + free(node); + } + } + } + return true; + }else{ + //当前节点存在孩子时 + if(includedWord(node)){ + node->exist=false; + }else{ + deleteAllNode(node); + } + return true; + } + }else if(strlen(node->str)child[i])){ + return true; + } + } + if(node->exist){ + return true; + } + return false; +} + +//删除以node为根的树 +void deleteAllNode(radixNode* node){ + if(node==NULL)return; + radixNode* temp; + for(int i=iter(node,BEGIN);i!=END;i=iter(node,i)){ + deleteAllNode(node->child[i]); + } + free(node); +} + + +//删除节点的辅助函数 +bool deleteFromChild(char* str,radixNode* node){ + if(node==NULL)return false; + for(int i=iter(node,BEGIN);i!=END;i=iter(node,i)){ + if(deleteFromNode(node,node->child[i],str)){ + return true; + } + } +} + + +//获得节点的子树节点的数量 +int getSize(radixNode* node){ + if(node==NULL)return -1; + int size=0; + for(int i=0;ichild[i]!=NULL){ + size++; + } + } + return size; +} + + + + +//搜索字符串 +bool search(char* word,radixTree* tree){ + if(word=="")return false; + return searchFromNode(word,tree->root); +} + +//辅助函数 +bool searchFromNode(char* word,radixNode* node){ + if(node==NULL)return false; + if(isRoot(node)){ + return searchFromChild(word,node); + } + //找出word与当前节点的公共前缀 + int Index=calPreFix(word,node->str); + if(Index<0){ + return false; + } + //完全匹配 + if((Index==strlen(word)-1)&&node->exist){ + return true; + }else{ + //部分匹配 + return searchFromChild(substring(word,Index+1,strlen(word)-Index-1),node); + } +} + +//辅助函数 +bool searchFromChild(char* word,radixNode* node){ + for(int i=0;ichild[i])){ + return true; + } + } + return false; +} + +//计算树高 +int height(radixTree* tree){ + return heightOfNode(tree->root); +} + +//树高辅助函数 +int heightOfNode(radixNode* node){ + if(node==NULL)return 0; + int height_tree=0; + for(int i=iter(node,BEGIN);i!=END;i=iter(node,i)){ + int temp=heightOfNode(node->child[i]); + if(height_treeroot,&num); + return num; +} + +void sizeOfNode(radixNode* node,int *num){ + if(node==NULL)return; + for(int i=iter(node,BEGIN);i!=END;i=iter(node,i)){ + sizeOfNode(node->child[i],num); + } + if(node->exist){ + (*num)++; + } +} + +void strCopy(char* str1,char* str2){ + int len=strlen(str2); + if(len==0)return; + str1=(char*)malloc(sizeof(char)*(len+1)); + for(int i=0;i=MAXSIZE){ + return -1; + } + for(;itchild[it]==NULL){ + continue; + } + return it; + } + return -1; +} + + +void TestRadix(){ + printf("test radix tree\n"); + radixTree* tree=createRadixTree(); + char* s=(char*)malloc(sizeof(char)*10); + s="ab\0"; + insert(tree,s); + s="abc\0"; + insert(tree,s); + s="abdg\0"; + insert(tree,s); + s="cd\0"; + insert(tree,s); + s="abdgo\0"; + insert(tree,s); + + if(search(s,tree)){ + printf("search 'abdg' successfully\n"); + } + if(search(s,tree)){ + printf("search 'abdgo' successfully\n"); + } + + printf("size is :%d\n",size(tree)); + printf("height is:%d\n",height(tree)); + + if(deleteNode(s,tree)){ + printf("delete word of '%s' successfully\n",s); + } + if(!search(s,tree)){ + printf("search %s failure\n",s); + } + s="abc\0"; + if(deleteNode(s,tree)){ + printf("delete '%s'successfully\n",s); + } + if(!search(s,tree)){ + printf("search %s failure\n",s); + } + printf("size is :%d\n",size(tree)); + printf("height is:%d\n",height(tree)); +} + +PRIV_SHELL_CMD_FUNCTION(TestRadix, a radix_tree test sample, PRIV_SHELL_CMD_MAIN_ATTR); diff --git a/APP_Framework/Applications/app_test/test_radix_tree/test_radix_tree.h b/APP_Framework/Applications/app_test/test_radix_tree/test_radix_tree.h new file mode 100644 index 000000000..773da4cf6 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_radix_tree/test_radix_tree.h @@ -0,0 +1,131 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** +* @file: test_radix_tree.cc +* @brief: a application of radixTree +* @version: 1.0 +* @author: huzhongwen +* @date: 2023/6/22 +*/ + + +#ifndef RADIX_TREE +#define RADIX_TREE + +#include +#include +#include + + +#define MAXSIZE (10) +#define ROOTVAL "####\0" + + +typedef struct rdNode +{ + char* str; + bool exist; + struct rdNode *child[MAXSIZE]; +}radixNode; + +typedef struct rdTree +{ + struct rdNode* root; +}radixTree; + +//创建根节点 +radixTree* createRadixTree(); + +//从树节点创建子树节点 +void createRadixNode(char* str,int index,radixNode* node); + +//创建节点并初始化 +radixNode* createNode(); + +//判断树节点是否是根节点 +bool isRoot(radixNode* node); + +void insert(radixTree* tree,char* str); + +//在包含公共前缀时,插入节点 +void insertNode(radixTree *tree,radixNode* node,char* str); + +void insertChild(radixTree* tree,radixNode* node,char* str); + +//找到一个字符串是否包含前缀 +bool isPartPreFix(char* str,radixNode*node); + + +//计算插入的str和节点的str的公共部分的索引 +int calPreFix(char* str,char* node_str); + +//计算char长度 +int getLength(char* str); + +//复制chars数组 +int copyChar(char* str1,char* str2); + +//检查子树中是否包含节点 +bool includedWord(radixNode* node); + +//删除以node为根的树 +void deleteAllNode(radixNode* node); + +//删除节点 +bool deleteNode(char* str,radixTree* tree); + +//删除节点辅助函数 +bool deleteFromNode(radixNode* parentNode,radixNode* node,char* str); + +//删除节点的辅助函数 +bool deleteFromChild(char* str,radixNode* node); + +//获得节点的子树节点的数量 +int getSize(radixNode* node); + +//打印树的每层的节点数 +void printTree(radixNode* node); + +//截取字符串 +char* substring(char* str,int start,int len); + +//搜索字符串 +bool search(char* word,radixTree* tree); + +//辅助函数 +bool searchFromNode(char* word,radixNode* node); + +//辅助函数 +bool searchFromChild(char* word,radixNode* node); + +//计算树高 +int height(radixTree* tree); + +//树高辅助函数 +int heightOfNode(radixNode* node); + +//树存储的字符串的个数 +int size(radixTree* tree); + +void sizeOfNode(radixNode* node,int *num); + +//复制字符串 +void strCopy(char* str1,char* str2); + +//孩子节点的迭代器 +int iter(radixNode* node,int it); + + +//void TestRadix(); + +#endif \ No newline at end of file diff --git a/Ubiquitous/XiZi_IIoT/board/k210-emulator/config.mk b/Ubiquitous/XiZi_IIoT/board/k210-emulator/config.mk index d33cf2db8..159f99fd3 100644 --- a/Ubiquitous/XiZi_IIoT/board/k210-emulator/config.mk +++ b/Ubiquitous/XiZi_IIoT/board/k210-emulator/config.mk @@ -14,4 +14,3 @@ export DEFINES := -DHAVE_CCONFIG_H -DHAVE_SIGINFO export ARCH = risc-v export MCU = k210 -