首頁 - 網(wǎng)校 - 萬題庫 - 直播 - 雄鷹網(wǎng)校 - 團購 - 書城 - ? - 學(xué)習(xí)通 - 導(dǎo)航 -
首頁網(wǎng)校萬題庫直播雄鷹網(wǎng)校團購書城?論壇實用文檔作文大全寶寶起名
2015中考
法律碩士
2015高考
MBA考試
2015考研
MPA考試
在職研
中科院
考研培訓(xùn)
專升本
自學(xué)考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點日語
職稱英語
口譯筆譯
申碩英語
零起點韓語
商務(wù)英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點英語
托福考試
托業(yè)考試
零起點法語
雅思考試
成人英語三級
零起點德語
等級考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計算機 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報 關(guān) 員
外 銷 員
價格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報檢員
法律顧問
管理咨詢
企業(yè)培訓(xùn)
社會工作者
銀行從業(yè)
教師資格
營養(yǎng)師
保險從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國際商務(wù)
心理咨詢
營 銷 師
司法考試
國際貨運代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護士
會計從業(yè)資格
基金從業(yè)資格
統(tǒng)計從業(yè)資格
經(jīng)濟師
精算師
統(tǒng)計師
會計職稱
法律顧問
ACCA考試
初級會計職稱
資產(chǎn)評估師
高級經(jīng)濟師
注冊會計師
高級會計師
美國注冊會計師
審計師考試
國際內(nèi)審師
注冊稅務(wù)師
理財規(guī)劃師
一級建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價師
二級建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價工程師
注冊測繪師
質(zhì)量工程師
巖土工程師
注冊給排水
造價員考試
注冊計量師
環(huán)保工程師
化工工程師
暖通工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
消防工程師
監(jiān)理工程師
房地產(chǎn)估價
土地估價師
安全評價師
房地產(chǎn)經(jīng)紀(jì)人
投資項目管理師
環(huán)境影響評價師
土地登記代理人
寶寶起名
繽紛校園
實用文檔
入黨申請
英語學(xué)習(xí)
思想?yún)R報
作文大全
工作總結(jié)
求職招聘 論文下載 直播課堂
您現(xiàn)在的位置: 考試吧 > 軟件水平考試 > 復(fù)習(xí)資料 > 程序員 > 正文

2015年軟件水平考試程序員精選題(4)

考試吧整理“2015年軟件水平考試程序員精選題(4)”供考生參考,更多軟件水平考試資訊和備考資料請關(guān)注考試吧軟件水平考試網(wǎng)。

  查看匯總:2015軟件水平考試程序員精選題匯總

  求二元查找樹的鏡像

  題目:輸入一顆二元查找樹,將該樹轉(zhuǎn)換為它的鏡像,即在轉(zhuǎn)換后的二元查找樹中,左子樹的結(jié)點都大于右子樹的結(jié)點。用遞歸和循環(huán)兩種方法完成樹的鏡像轉(zhuǎn)換。

  例如輸入:

  8

  / \

  6 10

  /\ /\

  5 7 9 11

  輸出:

  8

  / \

  10 6

  /\ /\

  11 9 7 5

  定義二元查找樹的結(jié)點為:

  struct BSTreeNode // a node in the binary search tree (BST)

  {

  int m_nValue; // value of node

  BSTreeNode *m_pLeft; // left child of node

  BSTreeNode *m_pRight; // right child of node

  };

  分析:盡管我們可能一下子不能理解鏡像是什么意思,但上面的例子給我們的直觀感覺,就是交換結(jié)點的左右子樹。我們試著在遍歷例子中的二元查找樹的同時來交換每個結(jié)點的左右子樹。遍歷時首先訪問頭結(jié)點8,我們交換它的左右子樹得到:

  8

  / \

  10 6

  /\ /\

  9 11 5 7

  我們發(fā)現(xiàn)兩個結(jié)點6和10的左右子樹仍然是左結(jié)點的值小于右結(jié)點的值,我們再試著交換他們的左右子樹,得到:

  8

  / \

  10 6

  /\ /\

  11 9 7 5

  剛好就是要求的輸出。

  上面的分析印證了我們的直覺:在遍歷二元查找樹時每訪問到一個結(jié)點,交換它的左右子樹。這種思路用遞歸不難實現(xiàn),將遍歷二元查找樹的代碼稍作修改就可以了。參考代碼如下:

  ///////////////////////////////////////////////////////////////////////

  // Mirror a BST (swap the left right child of each node) recursively

  // the head of BST in initial call

  ///////////////////////////////////////////////////////////////////////

  void MirrorRecursively(BSTreeNode *pNode)

  {

  if(!pNode)

  return;

  // swap the right and left child sub-tree

  BSTreeNode *pTemp = pNode->m_pLeft;

  pNode->m_pLeft = pNode->m_pRight;

  pNode->m_pRight = pTemp;

  // mirror left child sub-tree if not null

  if(pNode->m_pLeft)

  MirrorRecursively(pNode->m_pLeft);

  // mirror right child sub-tree if not null

  if(pNode->m_pRight)

  MirrorRecursively(pNode->m_pRight);

  }

  由于遞歸的本質(zhì)是編譯器生成了一個函數(shù)調(diào)用的棧,因此用循環(huán)來完成同樣任務(wù)時最簡單的辦法就是用一個輔助棧來模擬遞歸。首先我們把樹的頭結(jié)點放入棧中。在循環(huán)中,只要棧不為空,彈出棧的棧頂結(jié)點,交換它的左右子樹。如果它有左子樹,把它的左子樹壓入棧中;如果它有右子樹,把它的右子樹壓入棧中。這樣在下次循環(huán)中就能交換它兒子結(jié)點的左右子樹了。參考代碼如下:

  ///////////////////////////////////////////////////////////////////////

  // Mirror a BST (swap the left right child of each node) Iteratively

  // Input: pTreeHead: the head of BST

  ///////////////////////////////////////////////////////////////////////

  void MirrorIteratively(BSTreeNode *pTreeHead)

  {

  if(!pTreeHead)

  return;

  std::stackstackTreeNode;

  stackTreeNode.push(pTreeHead);

  while(stackTreeNode.size())

  {

  BSTreeNode *pNode = stackTreeNode.top();

  stackTreeNode.pop();

  // swap the right and left child sub-tree

  BSTreeNode *pTemp = pNode->m_pLeft;

  pNode->m_pLeft = pNode->m_pRight;

  pNode->m_pRight = pTemp;

  // push left child sub-tree into stack if not null

  if(pNode->m_pLeft)

  stackTreeNode.push(pNode->m_pLeft);

  // push right child sub-tree into stack if not null

  if(pNode->m_pRight)

  stackTreeNode.push(pNode->m_pRight);

  }

  }

  相關(guān)推薦:

  2015年軟考信息技術(shù)處理員考前知識點總結(jié)匯總

  2015年軟件水平考試《程序員》提高練習(xí)題匯總

  2015軟件水平考試《程序員》知識點總結(jié)匯總

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。
Copyright © 2004- 考試吧軟件水平考試網(wǎng) All Rights Reserved 
中國科學(xué)院研究生院權(quán)威支持(北京)
在線模擬試題
考證通關(guān)殺器
考試最新資訊
學(xué)
一次通關(guān)技巧