2021年湖北省基礎數(shù)據(jù)要領_第1頁
2021年湖北省基礎數(shù)據(jù)要領_第2頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、2021年湖北省基礎數(shù)據(jù)要領 2021年湖北省基礎數(shù)據(jù)要領 1、 二叉樹的層次遍歷序列的第一個結(jié)點是二叉樹的根。實際上,層次遍歷序列中的每個結(jié)點都是“局部根”。確定根后,到二叉樹的中序序列中,查到該結(jié)點,該結(jié)點將二叉樹分為“左根右”三部分。若左、右子樹均有,則層次序列根結(jié)點的后面應是左右子樹的根;若中序序列中只有左子樹或只有右子樹,則在層次序列的根結(jié)點后也只有左子樹的根或右子樹的根。這樣,定義一個全局變量指針r,指向?qū)哟涡蛄写幚碓亍K惴ㄖ邢忍幚砀Y(jié)點,將根結(jié)點和左右子女的信息入隊列。然后,在隊列不空的條件下,循環(huán)處理二叉樹的結(jié)點。隊列中元素的數(shù)據(jù)結(jié)構(gòu)定義如下: typedef struct

2、 int lvl; /層次序列指針,總是指向當前“根結(jié)點”在層次序列中的位置 int l,h; /中序序列的下上界 int f; /層次序列中當前“根結(jié)點”的雙親結(jié)點的指針 int lr; / 1雙親的左子樹 2雙親的右子樹 qnode; bitree creat(datatype in,level,int n) /由二叉樹的層次序列l(wèi)eveln和中序序列inn生成二叉樹。 n是二叉樹的結(jié)點數(shù) if (n1) printf(“參數(shù)錯誤n”); exit(0); qnode s,q; /q是元素為qnode類型的隊列,容量足夠大 init(q); int r=0; /r是層次序列指針,指向當前待

3、處理的結(jié)點 bitree p=(bitree)malloc(sizeof(binode); /生成根結(jié)點 p-data=level0; p-lchild=null; p-rchild=null; /填寫該結(jié)點數(shù)據(jù) for (i=0; in; i+) /在中序序列中查找根結(jié)點,然后,左右子女信息入隊列 if (ini=level0) break; if (i=0) /根結(jié)點無左子樹,遍歷序列的1n-1是右子樹 p-lchild=null; s.lvl=+r; s.l=i+1; s.h=n-1; s.f=p; s.lr=2; enqueue(q,s); else if (i=n-1) /根結(jié)點無右

4、子樹,遍歷序列的1n-1是左子樹 p-rchild=null; s.lvl=+r; s.l=1; s.h=i-1; s.f=p; s.lr=1; enqueue(q,s); else /根結(jié)點有左子樹和右子樹 s.lvl=+r; s.l=0; s.h=i-1; s.f=p; s.lr=1;enqueue(q,s);/左子樹有關信息入隊列 s.lvl=+r; s.l=i+1;s.h=n-1;s.f=p; s.lr=2;enqueue(q,s);/右子樹有關信息入隊列 while (!empty(q) /當隊列不空,進行循環(huán),構(gòu)造二叉樹的左右子樹 s=delqueue(q); father=s.f

5、; for (i=s.l; i=s.h; i+) if (ini=levels.lvl) break; p=(bitreptr)malloc(sizeof(binode); /申請結(jié)點空間 p-data=levels.lvl; p-lchild=null; p-rchild=null; /填寫該結(jié)點數(shù)據(jù) if (s.lr=1) father-lchild=p; else father-rchild=p; /讓雙親的子女指針指向該結(jié)點 if (i=s.l) p-lchild=null; /處理無左子女 2021年湖北省基礎數(shù)據(jù)要領 s.lvl=+r; s.l=i+1; s.f=p; s.lr=2

6、; enqueue(q,s); else if (i=s.h) p-rchild=null; /處理無右子女 s.lvl=+r; s.h=i-1; s.f=p; s.lr=1; enqueue(q,s); elses.lvl=+r; s.h=i-1; s.f=p; s.lr=1; enqueue(q,s);/左子樹有關信息入隊列 s.lvl=+r; s.l=i+1; s.f=p; s.lr=2; enqueue(q,s); /右子樹有關信息入隊列 /結(jié)束while (!empty(q) return(p); /算法結(jié)束 2、 二叉樹的層次遍歷序列的第一個結(jié)點是二叉樹的根。實際上,層次遍歷序列中

7、的每個結(jié)點都是“局部根”。確定根后,到二叉樹的中序序列中,查到該結(jié)點,該結(jié)點將二叉樹分為“左根右”三部分。若左、右子樹均有,則層次序列根結(jié)點的后面應是左右子樹的根;若中序序列中只有左子樹或只有右子樹,則在層次序列的根結(jié)點后也只有左子樹的根或右子樹的根。這樣,定義一個全局變量指針r,指向?qū)哟涡蛄写幚碓亍K惴ㄖ邢忍幚砀Y(jié)點,將根結(jié)點和左右子女的信息入隊列。然后,在隊列不空的條件下,循環(huán)處理二叉樹的結(jié)點。隊列中元素的數(shù)據(jù)結(jié)構(gòu)定義如下: typedef struct int lvl; /層次序列指針,總是指向當前“根結(jié)點”在層次序列中的位置 int l,h; /中序序列的下上界 int f; /層

8、次序列中當前“根結(jié)點”的雙親結(jié)點的指針 int lr; / 1雙親的左子樹 2雙親的右子樹 qnode; bitree creat(datatype in,level,int n) /由二叉樹的層次序列l(wèi)eveln和中序序列inn生成二叉樹。 n是二叉樹的結(jié)點數(shù) if (n1) printf(“參數(shù)錯誤n”); exit(0); qnode s,q; /q是元素為qnode類型的隊列,容量足夠大 init(q); int r=0; /r是層次序列指針,指向當前待處理的結(jié)點 bitree p=(bitree)malloc(sizeof(binode); /生成根結(jié)點 p-data=level0;

9、 p-lchild=null; p-rchild=null; /填寫該結(jié)點數(shù)據(jù) for (i=0; in; i+) /在中序序列中查找根結(jié)點,然后,左右子女信息入隊列 if (ini=level0) break; if (i=0) /根結(jié)點無左子樹,遍歷序列的1n-1是右子樹 p-lchild=null; s.lvl=+r; s.l=i+1; s.h=n-1; s.f=p; s.lr=2; enqueue(q,s); else if (i=n-1) /根結(jié)點無右子樹,遍歷序列的1n-1是左子樹 p-rchild=null; s.lvl=+r; s.l=1; s.h=i-1; s.f=p; s.

10、lr=1; enqueue(q,s); 2021年湖北省基礎數(shù)據(jù)要領 else /根結(jié)點有左子樹和右子樹 s.lvl=+r; s.l=0; s.h=i-1; s.f=p; s.lr=1;enqueue(q,s);/左子樹有關信息入隊列 s.lvl=+r; s.l=i+1;s.h=n-1;s.f=p; s.lr=2;enqueue(q,s);/右子樹有關信息入隊列 while (!empty(q) /當隊列不空,進行循環(huán),構(gòu)造二叉樹的左右子樹 s=delqueue(q); father=s.f; for (i=s.l; i=s.h; i+) if (ini=levels.lvl) break;

11、p=(bitreptr)malloc(sizeof(binode); /申請結(jié)點空間 p-data=levels.lvl; p-lchild=null; p-rchild=null; /填寫該結(jié)點數(shù)據(jù) if (s.lr=1) father-lchild=p; else father-rchild=p; /讓雙親的子女指針指向該結(jié)點 if (i=s.l) p-lchild=null; /處理無左子女 s.lvl=+r; s.l=i+1; s.f=p; s.lr=2; enqueue(q,s); else if (i=s.h) p-rchild=null; /處理無右子女 s.lvl=+r; s.h=i-1; s.f=p; s.lr=1; enqueue(q,s); elses.lvl=+r; s.h=i-1; s.f=p; s.lr=1; enqueue(q,s);/左子樹有關信息入隊列 s.lvl=+r; s.l=i+1; s.f=p;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論