女人久久久www免费人成看片,国内自拍偷拍网,国产一区二区三区免费在线观看,欧美精品三区四区,91久久国产综合久久91,欧美成人精品第一区二区三区 ,美女成人在线观看

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

閱讀以下說(shuō)明和C函數(shù),填補(bǔ)代碼中的空缺(1)~(6),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
    二叉樹(shù)的寬度定義為含有結(jié)點(diǎn)數(shù)最多的那一層上的結(jié)點(diǎn)數(shù)。函數(shù)GetWidth()用于求二叉樹(shù)的寬度。其思路是根據(jù)樹(shù)的高度設(shè)置一個(gè)數(shù)組counter[],counter[i]存放第i層上的結(jié)點(diǎn)數(shù),并按照層次順序來(lái)遍歷二叉樹(shù)中的結(jié)點(diǎn),在此過(guò)程中可獲得每個(gè)結(jié)點(diǎn)的層次值,最后從counter[]中取出最大的元素就是樹(shù)的寬度。
    按照層次順序遍歷二叉樹(shù)的實(shí)現(xiàn)方法是借助一個(gè)隊(duì)列,按訪問(wèn)結(jié)點(diǎn)的先后順序來(lái)記錄結(jié)點(diǎn),離根結(jié)點(diǎn)越近的結(jié)點(diǎn)越先進(jìn)入隊(duì)列,具體處理過(guò)程為:先令根結(jié)點(diǎn)及其層次號(hào)(為1)進(jìn)入初始為空的隊(duì)列,然后在隊(duì)列非空的情況下,取出隊(duì)頭所指示的結(jié)點(diǎn)及其層次號(hào),然后將該結(jié)點(diǎn)的左予樹(shù)根結(jié)點(diǎn)及層次號(hào)入隊(duì)列(若左子樹(shù)存在),其次將該結(jié)點(diǎn)的右子樹(shù)根結(jié)點(diǎn)及層次號(hào)入隊(duì)列(若右子樹(shù)存在),然后再取隊(duì)頭,重復(fù)該過(guò)程直至完成遍歷。
    設(shè)二叉樹(shù)采用二叉鏈表存儲(chǔ),結(jié)點(diǎn)類型定義如下:
    typedef struct BTNode {
            TElemType data;
            struct BTNode *left, *right;
    } BTNode, *BiTree;
 
  隊(duì)列元素的類型定義如下:
    typedef struct {
            BTNode *ptr;
            int LevelNumber;
    } QElemType;
   

GetWidth()函數(shù)中用到的函數(shù)原型如下所述,隊(duì)列的類型名為QUEUE:

【C函數(shù)】
int GetWidth(BiTree root)
{
              QUEUE   Q;
QElemType a, b;
int width, height=GetHeight(root);
     int i, *counter=(int *) calloc (height+1, sizeof(int));
       
        if  ( (1) )    return -1;        /* 申請(qǐng)空間失敗 */
        if  ( !root )    return 0;           /* 空樹(shù)的寬度為0 */
       
        if  ( (2) )    return -1;        /* 初始化隊(duì)列失敗時(shí)返回 */
        a.ptr=root;    a.LevelNumber=1;
   
if (!EnQueue ( &Q, a)) return  -1;      /* 元素入隊(duì)列操作失敗時(shí)返回 */
     
while (!isEmpty (Q))  {
            if(  (3)  )return-1;                /* 出隊(duì)列操作失敗時(shí)返回*/
            counter[b.LevelNumber]++;  /* 對(duì)層號(hào)為b.LevelNumber的結(jié)點(diǎn)計(jì)數(shù) */
            if(b.ptr->left){ */ 若左子樹(shù)存在,則左子樹(shù)根結(jié)點(diǎn)及其層次號(hào)入隊(duì) */
                a.ptr=b.ptr->left;
                a.LevelNumber= (4) ;
                if  (  !EnQueue (&Q,  a))  return  -1;
            }
            if(b.ptr->right){ /* 若右子樹(shù)存在,則右子樹(shù)根結(jié)點(diǎn)及其層次號(hào)入隊(duì) */
                a.ptr = b.ptr->right;
                a.LeveINumber=  (5) ;
                if  ( !EnQueue (&Q,  a))  return -1;
            }
        }
    width=counter [1] ;
    for (i=1;  i< height  +1;  i++)    /* 求counter[]中的最大值 */
            if  ( (6) ) width=counter[i];
   
    free(counter);
    return width;
}


相關(guān)試題



更多試題

推薦文章