2009年上半年軟考軟件設(shè)計師下午試卷[9]

軟件設(shè)計師 責(zé)任編輯:iorilzc 2009-05-24

添加老師微信

備考咨詢

加我微信

摘要:試題五(共15分)閱讀下列說明和C函數(shù)代碼,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。【說明】對二叉樹進行遍歷是二叉樹的一個基本運算。遍歷是指按某種策略訪問二叉樹的每個結(jié)點,且每個結(jié)點僅訪問一次的過程。函數(shù)InOrder()借助棧實現(xiàn)二叉樹的非遞歸中序遍歷運算。設(shè)二叉樹采用二叉鏈表存儲,結(jié)點類型定義如下:

  試題五(共 15 分)

  閱讀下列說明和C 函數(shù)代碼,將應(yīng)填入 (n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。

  【說明】

  對二叉樹進行遍歷是二叉樹的一個基本運算。遍歷是指按某種策略訪問二叉樹的每個結(jié)點,且每個結(jié)點僅訪問一次的過程。函數(shù)InOrder()借助棧實現(xiàn)二叉樹的非遞歸中序遍歷運算。

  設(shè)二叉樹采用二叉鏈表存儲,結(jié)點類型定義如下:

  typedef struct BtNode{
  ElemType  data;  /*結(jié)點的數(shù)據(jù)域,ElemType的具體定義省略*/
  struct BtNode *lchild,*rchild;  /*結(jié)點的左、右孩子指針域*/
  }BtNode, *BTree;
  在函數(shù)InOrder()中,用棧暫存二叉樹中各個結(jié)點的指針,并將棧表示為不含頭結(jié)點
  的單向鏈表(簡稱鏈棧),其結(jié)點類型定義如下:
  typedef struct StNode{  /*鏈棧的結(jié)點類型*/
  BTree elem;  /*棧中的元素是指向二叉鏈表結(jié)點的指針*/
  struct StNode *link;
  }StNode;

  假設(shè)從棧頂?shù)綏5椎脑貫?en、en-1、…、e1,則不含頭結(jié)點的鏈棧示意圖如圖5-1所示。

  【C函數(shù)】

  int  InOrder(BTree root)  /* 實現(xiàn)二叉樹的非遞歸中序遍歷  */
  {
  BTree ptr; /* ptr用于指向二叉樹中的結(jié)點  */
  StNode *q;  /* q暫存鏈棧中新創(chuàng)建或待刪除的結(jié)點指針*/
  StNode *stacktop = NULL;  /* 初始化空棧的棧頂指針stacktop */
  ptr = root;  /* ptr指向二叉樹的根結(jié)點  */
  while ( (1)  || stacktop != NULL) {
  while (ptr != NULL) {
  q = (StNode *)malloc(sizeof(StNode));
  if (q == NULL)
  return -1;
  q->elem = ptr;
  (2)  ;
  stacktop = q;  /*stacktop指向新的棧頂*/
  ptr = (3)  ; /*進入左子樹*/
  }
  q = stacktop;
  (4)  ;  /*棧頂元素出棧*/
  visit(q);  /*visit是訪問結(jié)點的函數(shù),其具體定義省略*/
  ptr = (5)  ;  /*進入右子樹*/
  free(q);  /*釋放原棧頂元素的結(jié)點空間*/
  }
  return 0;
  }/*InOrder*/ 
  [答案討論]

[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]  [10]  [11]  

更多資料
更多課程
更多真題
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,本網(wǎng)站提供的以上信息僅供參考,如有異議,請考生以權(quán)威部門公布的內(nèi)容為準(zhǔn)!

軟考備考資料免費領(lǐng)取

去領(lǐng)取

!
咨詢在線老師!