2023年广工数据结构实验报告平衡二叉树.pdf
《2023年广工数据结构实验报告平衡二叉树.pdf》由会员分享,可在线阅读,更多相关《2023年广工数据结构实验报告平衡二叉树.pdf(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、才 J j一 f/度 一 课 程 名 称.学 院 专 业 班 级 学 T学 生 姓 名.指 导 教 师 实 验 报 告 数 据 结 构 实 验 计 算 机 学 院 计 科 9 班 3 _苏 庆 2023 年 7 月 6 日1.题 目:平 衡 二 叉 树 AD T BBSTree数 据 对 象:D=a i I a iff ile m S e t,i=l,2.,n,nO 数 据 关 系:R l=|a i-1,a i,i=2,.,n 基 本 操 作:BBST r e e M akeB B ST r e e()操 作 结 果:创 建 好 一 棵 树 返 回:将 创 建 好 的 树 返 回 S t a
2、t u s I n s e r tAVL(BBST r e e&T,Rc d Type e,S t a t us&ta 1 1 e r)初 始 条 件:树 T 已 存 在,e 存 在,ta 1 l e r 为 真 操 作 结 果:将 e 插 入 到 T 中 返 回:成 功 TRUE,失 败 FALSES t a t u s D e l e t eAVL(BBSTr e e&t,R c dTy p e e,S ta t u s&s h o r t e r)初 始 条 件:树 T 已 存 在,e 存 在,s h o r te r为 真 操 作 结 果:将 e 从 T 中 删 除 返 回:成 功 T
3、RUE,失 败 FALSEBBSTr e e Sea r chAV L(B B S T r e e T,RcdTyp e e)初 始 条 件:树 T 已 存 在,e 存 在 操 作 结 果:从 T 中 找 到 e返 回:以 e 为 根 节 点 的 树 v o i d L _ R o ta te(BB S T re e&p)初 始 条 件:树 p 存 在操 作 结 果:对 P 左 旋 操 作 v oid R_RO t ate(B B S T r e e&p)初 始 条 件:树 p 存 在 操 作 结 果:对 p 右 旋 操 作 void L e ft B a lance(BBSTree&T)初
4、始 条 件:树 T 存 在 操 作 结 果:对 T 左 平 衡 操 作 v o i d RightBalance(BBSTre e&T)初 始 条 件:树 T 存 在 操 作 结 果:对 T 右 平 衡 操 作 void Ex c hange S ubT r ee(BB S T r ee&T)初 始 条 件:树 T 存 在 操 作 结 果:对 T 所 有 左 右 孩 子 互 换 int BBSTr e eDe p t h(B BSTr e e T)初 始 条 件:树 T 已 存 在 操 作 结 果:求 树 T 的 深 度 返 回:树 的 深 度 BBSTree Combi ne 2 T r e
5、 e(BBsT r ee T 1,BBST r e e T2)初 始 条 件:树 T 1 和 T2已 存 在 操 作 结 果:将 T1和 T2合 并 返 回:合 并 后 的 树 Statu s Spl i tBBS T r ee(B B S T ree Ttl,B B ST r e e&Tt2,o o oBBSTre e&T t 3,int x)初 始 条 件:树 Tt 1,T t 2,Tt 3 己 存 在,x 存 在 操 作 结 果:将 Tt 1分 裂 成 Tt2和 Tt3返 回:以 e 为 根 节 点 的 树 St a tus P r eOrder_ RecTra v e r se(BBS
6、Tree T)初 始 条 件:树 T 已 存 在 操 作 结 果:对 树 T 进 行 递 归 先 序 遍 历 输 出 返 回:成 功 T R U E 失 败 F A L S EStat u s InOrd e r_ Re c Traverse(BBSTr e e T)初 始 条 件:树 T 已 存 在 操 作 结 果:对 树 T 进 行 递 归 中 序 遍 历 输 出 返 回:成 功 TRUE 失 败 FALSES t atu s Las t Order_Re c Tr a verse(BBSTree T)初 始 条 件:树 T 已 存 在 操 作 结 果:对 树 T 进 行 递 归 后 序
7、遍 历 输 出 返 回:成 功 T R U E 失 败 FA L SEvoid Pr e 0 r d e r Tra v ese_I(BBSTree T)初 始 条 件:树 T 已 存 在 操 作 结 果:对 树 T 进 行 非 递 归 先 序 遍 历 输 出 v oi d In O rderTr a ve r se_ I(BB S T r e e T)初 始 条 件:树 T 已 存 在 操 作 结 果:对 树 T 进 行 非 递 归 中 序 遍 历 输 出 v o id LastOrd e rTra v es e _l(BBSTre e T)初 始 条 件:树 T 已 存 在 操 作 结 果
8、:对 树 T 进 行 非 递 归 后 序 遍 历 输 出 void Le v e lOrederTra v erse_Pri n t(BBSTree T)初 始 条 件:树 T 已 存 在 操 作 结 果:对 树 T 进 行 非 递 归 层 次 遍 历 输 出 void B r aNo t a t io n Prin t(BBST r e e T)初 始 条 件:树 T 已 存 在 操 作 结 果:对 树 T 用 括 号 表 达 法 输 出 ADT BBST r e e2.存 储 结 构 定 义#i n c 1 u d e#i n c 1 ude#d e f i n e O V ERFLOW-
9、1#define OK 1#de f ine ER ROR 0#define TRUE 1#d e f i n e FALSE 0#defineLH+1 左 高#defin e EH 0/等 高#d e f i n e RH-1/右 高 typede f int Rc d Type;t y p edef i n t S t a t u s;/*平 衡 二 叉 树 结 构 体*/ty p edef struct BBSTNode R c d Ty p e da t a;i nt b f;BBSTNode*1 c hild,*rchild;JB B ST N odeB B ST ree;3.算 法
10、 设 计/*求 平 衡 二 义 树 的 深 度*/i n t BBST r e e De p th(BB S T r e e T)i nt depth L eft,d epth R ig h t;if(N U LL=T)r e turn 0;elsedep t hLe f t=BBST r e e D e p th(T-lc h i 1 d);d e pthRi g ht=BBSTr e eDept h(T-r chi 1 d);retur n 1+(dept h Left d epthRi g ht?d e pt h Lef t:dep thRight);)/*互 换 二 叉 树 所 有 结
11、 点 的 左 右 子 树 刃 void Ex c h a ng e S u bTree(BBS Tre e&T)BB S Tr e e temp;if(NU L L!=T)Ex c h a ng e Sub Tree(T-1 child);/使 用 递 归 互 换 左 子 树 Exch a ngeSub T r e e(T r c h i 1 d);/使 用 递 归 互 换 右 子 树 i f(T-1 ch i Id!=N ULL)|(T-r c hild!=NULL)假 如 T的 子 树 有 一 个 不 为 空,则 互 换 左 右 子 树 t e mp=T lc h ild;T-lchild
12、=T-rch i 1 d;T-rc h ild=temp;/*左 旋 调 整*/v o id L_R o tate(BB STre e&p)BBST ree rc=p-r c hild;p-rc h i Id=r c-1 chi 1 d;r c-lch i Id=p;p=rc;/*右 旋 调 整*/v o i d R_R o tate(BBST r ee&p)B B S Tree 1 c=p-lc h ild;plchild=lc-r chil d;lc-rchild=p;p=1 c;)/*左 平 衡 解 决 操 作 刃 vo i d Lef t Ba 1 an c e(BBSTre e&T)
13、BBST r e e 1 c,rd;1c=T-lch i Id;sw i tch(lc-b f)case LH:T-bf=1 c bf=EH;R_Rotate(T);b r eak;case R H:rd=1 c-r chil d;s wit c h(rd-bf)case LH:T-bf=RH;1 c-bf=EH;b r eak;ca s e EH:T-bf=1cb f=EH;bre a k;c a se R H:T-b f=EH;1 c-b f=L H;bre a k;)rd-b f=EH;L_R otat e(T-lchi 1 d);R_Ro t a te(T);b reak;/*右 平
14、衡 解 决 操 作*/void RightBa l a n c e(BBST r ee&T)B B S Tr e e rd,lc;r d=T-r c h i 1 d;sw i t c h(r d-bf)(case R H:T b f=rd bf=EH;L_Rotate(T);b r eak;cas e L H:lc=rd-lchild;s witch(lc-bf)c a s e R H:T-b f=L H;r d-b f=E H;b r ea k;c a s e EH:T-b f=rd-b f=E H;bre a k;case L H:T-b f=E H;r d bf=R H;bre a k;
15、lc-b f=E H;R_ R o t a t e(T-r c h ild);L _ R o tate(T);b r e a k;)/*平 衡 二 叉 树 的 插 入 操 作*/Sta t us Inse r tAVL(BBSTree&T,RcdT ype e,S t atu s&taller)i f(NULL=T)T=(BBSTree)ma 1 1 oc(s i zeo f(BBSTNode);T-data=e;T-bf=EH;T-lc h i Id=NULL;T-r child=NUL L;else if(e=Td a ta)书 中 已 存 在 和 e 相 等 的 结 点 t al 1 e
16、 r=F A LSE;return FALSE;e 1 se i f(e d ata)if(FALS E=InsertAV L(T-lchild,e,t a 1 ler)r etum FALS E;if(TRUE=t aller)sw i t ch(T-bf)ca s e LH:Lef t Bala n e e(T);tai 1 er=FA LSE;break;ca s e EH:T-bf=L H;tall e r=TRUE;break;c a se RH:T b f=E H;t a l l e r=FALSE;bre a k;el s e if(F ALSE=Inser t AVL(T rc
17、 h i Id,e,t a 1 1 e r)re t urnFALSE;i f(TRUE=taller)sw i t c h(T-bf)ca s e LH:T-bf=E H;t a Iler=F AL S E;brea k;c a s e E H:T-b f=RH;tal 1 er=T R U E;break;ca s e RH:R i ghtBalance(T);t a 1 ler=F A L S E;bre a k;return TRUE;)/*平 衡 二 叉 树 的 删 除 操 作*/Status D e leteAVL(BBS T r e e&t,RcdType e,Stat u s&
18、sho r ter)当 被 删 结 点 是 有 两 个 孩 子,且 其 前 驱 结 点 是 左 孩 子 时,tag=ls t atic int t a g=0;if(t=NULL)re t urn FALSE;/假 如 不 存 在 元 素,返 回 失 败 else i f(e=t-d a t a)BBS TN ode*q=NULL;/假 如 该 结 点 只 有 一 个 孩 子,则 将 自 子 树 取 代 该 结 点 if(t-lchil d=NULL)q=t;t=trch i 1 d;f r e e(q);sho r te r=TRUE;)e 1 s e if(t-rch i Id=NULL)
19、q=t;t=t-lc h il d;f ree(q);s ho r te r=TRUE;)假 如 被 删 结 点 有 两 个 孩 子,则 找 到 结 点 的 前 驱 结 点,并 将 前 驱 结 点 的 值 赋 给 该 结 点,然 后 删 除 前 驱 结 点 els e(q=t-lc h il d;whil e(q-rchild)q=q-rc h il d;t-data=q-d a t a;i f(t-lc h i 1 d-d a t a=q-d ata)t a g=1;De 1 e t e A VL(t-lch i Id,q-d a t a,s h orter);if(tag=l)BBS T
20、re e r=t-r c hi 1 d;if(NULL=r)t-b f=0;e I s esw i t c h(r-b f)ca s e EH:t-b f=-1;brea k;def a u I t:Righ t Bal a n ce(t);b reak;)e Ise if(eda t a)(/左 子 树 中 继 续 查 找 if(!D eleteAV L(t-l c hild,e,shorter)re t u r n F ALSE;)删 除 完 结 点 之 后,调 整 结 点 的 平 衡 因 子 if(sh o rter&(tag=0)(sw i tch(t-b f)c ase L H:t-
21、bf=EH;s h ort e r=T R UE;break;case EH:t-b f=RH:s h orter=FA L SE;bre a k;/假 如 本 来 就 是 右 子 树 较 高,删 除 之 后 就 不 平 衡,需 要 做 右 平。衡 操 作 c a s e RH:R i g htBalan c e(t);右 平 衡 解 决 i f(trchil d-b f=EH)sh o r t er=FALSE;e 1 ses h o r ter=TRU E;b rea k;)else if(e t-d a t a)右 子 树 中 继 续 查 找 if(!De 1 e t eAVL(trch
22、ild,e,s h o rter)re t u r n FAL SE;)删 除 完 结 点 之 后,调 整 结 点 的 平 衡 因 子 i f(s ho r te r&(t a g=0)s wit c h(t-b f)case L H:LeftBal a nc e(t);/左 平 衡 解 决 if(t-lchi 1 d-bf=EH)/注 意 这 里,画 图 思 考 一 下 sh o r t e r=F A LS E;e 1 seshorte r TR U E;b r eak;case E H:t-bf=LH;sh o rt e r=F A LS E;br e ak;ca s e RH:t-b
23、f=EH;shorte r=T R U E;br e a k;)if(t a g=1)i n t d印 thL e ft=BB S T r eeDepth(t-1 child);in t dep t hR i gh t=BBSTreeDep t h(t-rch i I d);t b f=de p t hLef t-dep t hRig h t;)retur n TRUE;)/*平 衡 二 叉 树 的 查 找 操 作 列 BB S Tr e e SearchAVL(BBSTree T,R c dT y pe e)i f(T=N U LL)r e turn NULL;i f(e=T-data)re
24、tur n T;else i f(e T-da t a)return S earch AV L(T-r c hil d,e);else r etur n Searc h AVL(T-lchild,e);)/*获 取 输 入 存 到 数 组 a*/A r ray Ge t I n putToAr r a y()Arr a y head,p,q;char k;h ead=p=q=NU L L;i n t m;i f(k!=n)sea n f(”d”,&m);p=(Ar r a yNode*)m a 1 1 oc(si z e of(Arr a y N o d e);h e ad=p;p-data=
25、m;k=g etchar();while(k!=,n,)scanf(n%d,&m);q=(Array Node*)m a 1 1 o c(s izeof(ArrayNo d e);q-d a t a=m;p-n ex t=q;p=p-n e x t;k=g e tch a r();)i f(p!=NULL)p-n e xt=NU L L;)r etur n head;返 回 存 放 数 据 的 头 指 针)/*根 据 输 入 的 字 符 串 建 一 棵 平 衡 二 叉 树*/B B ST r ee M a k eBB S T ree()i nt i=0;S ta t us ta 1 le r=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 年广工 数据结构 实验 报告 平衡 二叉
限制150内