中文字幕综合一区,伊人av网,欧美中日韩在线,亚洲国产香蕉视频,黄视频在线免费,天天操天天爱天天爽,狠狠躁天天躁

軟題庫 移動APP 掃碼下載APP 隨時(shí)隨地移動學(xué)習(xí) 培訓(xùn)課程
試卷名稱 2008年下半年程序員考試下午真題試題(案例分析)
考試中心《2008年下半年程序員考試下午真題試題(案例分析)》在線考試
試卷年份2008年下半年
試題題型【分析簡答題】
試題內(nèi)容

閱讀以下說明和C 函數(shù),將應(yīng)填入 (n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
    已知某二叉樹的非葉子結(jié)點(diǎn)都有兩個(gè)孩子結(jié)點(diǎn),現(xiàn)將該二叉樹存儲在結(jié)構(gòu)數(shù)組 Ht中。結(jié)點(diǎn)結(jié)構(gòu)及數(shù)組Ht的定義如下:
#define MAXLEAFNUM 30
struct node{
char ch; /*當(dāng)前結(jié)點(diǎn)表示的字符,對于非葉子結(jié)點(diǎn),此域不用*/
char *pstr; /*當(dāng)前結(jié)點(diǎn)的編碼指針,非葉子結(jié)點(diǎn)不用*/
int parent; /*當(dāng)前結(jié)點(diǎn)的父結(jié)點(diǎn),為0時(shí)表示無父結(jié)點(diǎn)*/
int lchild,rchild;
/*當(dāng)前結(jié)點(diǎn)的左、右孩子結(jié)點(diǎn),為0時(shí)表示無對應(yīng)的孩子結(jié)點(diǎn)*/
};
struct node Ht[2 * MAXLEAFNUM]; /*數(shù)組元素Ht[0]不用*/
該二叉樹的n個(gè)葉子結(jié)點(diǎn)存儲在下標(biāo)為1~n的Ht數(shù)組元素中。例如,某二叉樹如圖3-1所示,其存儲結(jié)構(gòu)如圖3-2所示,其中,與葉子結(jié)點(diǎn)a對應(yīng)的數(shù)組元素下標(biāo)為1,a 的父結(jié)點(diǎn)存儲在 Ht[5],表示為 Ht[1].parent=5。Ht[7].parent=0 表示 7 號結(jié)點(diǎn)是樹根,Ht[7].lchild=3、Ht[7].rchild=6 分別表示 7 號結(jié)點(diǎn)的左孩子是 3號結(jié)點(diǎn)、右孩子是 6 號結(jié)點(diǎn)。

如果用“0”或“1”分別標(biāo)識二叉樹的左分支和右分支(如圖 3-1 所示),從根結(jié)點(diǎn)開始到葉子結(jié)點(diǎn)為止,按所經(jīng)過分支的次序?qū)⑾鄳?yīng)標(biāo)識依次排列,可得到一個(gè) 0、1序列,稱之為對應(yīng)葉子結(jié)點(diǎn)的編碼。例如,圖3-1中a、b、c、d的編碼分別是100、101、0、11。
函數(shù)LeafCode(Ht[],n)的功能是:求解存儲在Ht中的二叉樹中所有葉子結(jié)點(diǎn)(n個(gè))的編碼,葉子結(jié)點(diǎn)存儲在Ht[1]~Ht[n]中,求出的編碼存儲區(qū)由對應(yīng)的數(shù)組元素pstr域指示。
函數(shù)LeafCode從葉子到根逆向求葉子結(jié)點(diǎn)的編碼。例如,對圖3-1中葉子結(jié)點(diǎn)a求編碼的過程如圖3-3所示。

typedef enum Status {ERROR, OK} Status;
【函數(shù)】
    Status LeafCode(struct node Ht[], int n)
{
int pc, pf; /*pc用于指出樹中的結(jié)點(diǎn),pf則指出pc所對應(yīng)結(jié)點(diǎn)的父結(jié)點(diǎn)*/
int i,start;
char tstr[31] = {‘\0’}; /*臨時(shí)存儲給定葉子結(jié)點(diǎn)的編碼,從高下標(biāo)開始存入*/
for(i=1;(1) ; i++) { /*對所有葉子結(jié)點(diǎn)求編碼,i表示葉結(jié)點(diǎn)在HT數(shù)組中的下標(biāo)*/
start = 29;
pc = i; pf = Ht[i].parent;
while (pf != (2) ) { /*沒有到達(dá)樹根時(shí),繼續(xù)求編碼*/
if ( (3) .lchild == pc ) /*pc所表示的結(jié)點(diǎn)是其父結(jié)點(diǎn)的左孩子*/
   tstr[--start] = ‘0’;
else
tstr[--start] = ‘1’;
pc = (4) ; pf = Ht[pf].parent; /*pc和pf分別向根方向回退一層*/
}/* end of while */
Ht[i].pstr = (char *) malloc(31-start);
if (!Ht[i].pstr) return ERROR;
strcpy(Ht[i].pstr, (5) );
}/* end of for */
return OK;
}/* end of LeafCode */


相關(guān)試題

推薦文章
合作網(wǎng)站內(nèi)容