首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務(wù)英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學(xué)習(xí) | 法語 | 德語 | 韓語
計算機(jī)等級考試 | 軟件水平考試 | 職稱計算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會計從業(yè)資格考試會計證) | 經(jīng)濟(jì)師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務(wù)師
注冊資產(chǎn)評估師 | 高級會計師 | ACCA | 統(tǒng)計師 | 精算師 | 理財規(guī)劃師 | 國際內(nèi)審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價師 | 土地估價師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項目管理師 | 土地登記代理人 | 環(huán)境影響評價師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
繽紛校園 | 實用文檔 | 英語學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲
您現(xiàn)在的位置: 考試吧(Exam8.com) > 軟件水平考試 > 復(fù)習(xí)資料 > 程序員資料 > 正文

2011年軟考程序員考試復(fù)習(xí)筆試知識點整理(18)

考試吧提供了“2011年軟考程序員考試復(fù)習(xí)筆試知識點整理”,供考生參考。

  更多:2011年軟考程序員考試復(fù)習(xí)筆試知識點整理匯總

  22、線索二叉樹

  (1)以二叉鏈表結(jié)點數(shù)據(jù)結(jié)構(gòu)所構(gòu)成的二叉鏈表作為二叉樹的存儲結(jié)構(gòu),叫做線索二叉鏈表;指向結(jié)點的線性前驅(qū)或者線性后繼結(jié)點的指針叫做線索;加上線索的二叉樹稱為線索二叉樹(Threaded Binary Tree);對二叉樹以某種次序(前序、中序、后序)遍歷使其變?yōu)榫索樹的過程叫做線索化。

  (2)[為什么要有線索二叉樹]二叉樹是一種非線性結(jié)構(gòu),對二叉樹的遍歷實際上是將二叉樹這種非線性結(jié)構(gòu)按某種需要轉(zhuǎn)化為線性序列,以便以后在對二叉樹進(jìn)行某種處理時直接使用。因此如何保存遍歷二叉樹后得到的線性序列,以避免對二叉樹的重復(fù)遍歷,是一個需要解決的問題。

  一種最簡單的方法是將得到的遍歷序列存放在另外的存儲空間內(nèi),但這需要付出額外的存儲花銷。我們能不能在不增加存儲空間的前提下,在原來二叉鏈表的存儲空間內(nèi)反映出某種遍歷后結(jié)點的邏輯關(guān)系,即遍歷后某個結(jié)點的直接前驅(qū)和直接后繼呢?

  另一種方法就是:當(dāng)我們用標(biāo)準(zhǔn)形式存儲一棵二叉樹時,樹中有一半以上的指針是空的。對于一棵具有n個結(jié)點的二叉樹,如果按標(biāo)準(zhǔn)形式來存儲,那么總共有2n個指針(用來存放左孩子、右孩子的指針)其中只有(n-1)個用來指向子結(jié)點,另外(n+1)個指針時空的。這顯然是浪費,我們應(yīng)該設(shè)法利用這些空的指針來實現(xiàn)保存遍歷二叉樹后得到的線性序列。

  由此,我們產(chǎn)生了線索二叉樹的概念。

  線索二叉樹主要是為了解決查找結(jié)點的線性前驅(qū)與后繼不方便的難題。它只增加了兩個標(biāo)志性域,就可以充分利用沒有左或右孩子的結(jié)點的左右孩子的存儲空間來存放該結(jié)點的線性前驅(qū)結(jié)點與線性后繼結(jié)點。兩個標(biāo)志性域所占用的空間是極少的,所有充分利用了二叉鏈表中空閑存的儲空間。

  對一棵給定的二叉樹,按不同的遍歷規(guī)則進(jìn)行線索化所得到的線索樹是不同的,分別用前序、中序、后序遍歷規(guī)則,對給定二叉樹進(jìn)行線索化得到的二叉樹,分別稱之為前序線索樹、中序線索樹、后序線索樹。

  要實現(xiàn)線索二叉樹,就必須定義二叉鏈表結(jié)點數(shù)據(jù)結(jié)構(gòu)如下(定義請看代碼):

  LnodeLtagDataRtagRnode

  說明:

  1. Ltag=0時,表示Lnode指向該結(jié)點的左孩子;

  2. Ltag=1時,表示Lnode指向該結(jié)點的線性前驅(qū)結(jié)點;

  3. Rtag=0時,表示Rnode指向該結(jié)點的右孩子;

  4. Rtag=1時,表示Rnode指向該結(jié)點的線性后繼結(jié)點;

  中序次序線索化二叉樹算法:

  中序次序線索化是指用二叉鏈表結(jié)點數(shù)據(jù)結(jié)構(gòu)建立二叉樹的二叉鏈表,然后按照中序遍歷的方法訪問結(jié)點時建立線索;(具體看代碼)

  檢索中序二叉樹某結(jié)點的線性前驅(qū)結(jié)點的算法:

  1. 如果該結(jié)點的Ltag=1,那么Lnode就是它的線性前驅(qū);

  2. 如果該結(jié)點的Ltag=0,那么該結(jié)點左子樹最右邊的尾結(jié)點就是它的線性前驅(qū)點;

  (具體請看代碼)

  檢索中序二叉樹某結(jié)點的線性后繼結(jié)點和算法:

  1. 如果該結(jié)點的Rtag=1,那么Rnode就是它的線性后繼結(jié)點;

  2. 如果該結(jié)瞇的Rtag=0,那么該結(jié)點右子樹最左邊的尾結(jié)點就是它的線性后繼結(jié)點

  (具體請看代碼)

  解決方案中所有到二叉樹的中序線索二叉樹和中序線索鏈表的圖

  //二叉樹線索化

  //輸入二叉樹先序,建樹,然后中序線索化,遍歷輸出

  #include

  usingnamespace std;

  enumPointerTag

  {

  Link,Thread //枚舉值Link和Thread分別為0,1

  };

  structBiThrNode //線索二叉樹的結(jié)點類型

  {

  char data;

  PointerTag LTag; //左標(biāo)志

  PointerTag RTag; //右標(biāo)志

  BiThrNode *lchild; //左孩子指針

  BiThrNode *rchild; //右孩子指針

  };

  typedefBiThrNode* BiThrTree;

  BiThrNode*pre=NULL; //全局量

  voidInOrderThreading(BiThrTree & Thrt,BiThrTree T);//線索化

  voidInThreading(BiThrTree p);//中序遍歷線索化

  boolPreOrderCreatBiTree(BiThrTree &T);//先序建立樹

  voidInOrderTraverse_Thr(BiThrTree T);//中序遍歷線索樹

  intmain()

  {

  BiThrTree T,Thrt;

  printf("輸入先序序列('#'表示空節(jié)點)建立二叉樹:\n");

  PreOrderCreatBiTree(T);//先序建立樹

  InOrderThreading(Thrt,T);//中序線索化

  printf("中序線索化,中序遍歷得中綴式:\n");

  InOrderTraverse_Thr(Thrt);//中序遍歷線索樹

  printf("\n");

  return 0;

  }

1 2 3 下一頁
  相關(guān)推薦:

  軟考程序員考試歷年真題重點題總結(jié)及答案

  2011年上半年軟考報名時間及方式匯總

  軟考程序員考試歷年真題匯總(2007年-2010年)

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。