欧美精品在欧美一区二区少妇,久久久久成人影视,99热在线精品呀,草莓视频手机在线观看

當前位置:

計算機軟考程序員面試題精選題2

發(fā)表時間:2015/4/23 10:18:53 來源:互聯(lián)網(wǎng) 點擊關(guān)注微信:關(guān)注中大網(wǎng)校微信
關(guān)注公眾號

-求二元查找樹的鏡像

題目:輸入一顆二元查找樹,將該樹轉(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)

相關(guān)推薦:

計算機軟件水平考試輔導資料

計算機軟件水平考試精品輔導班

(責任編輯:)

2頁,當前第1頁  第一頁  前一頁  下一頁
最近更新 考試動態(tài) 更多>
caopro97| 变态另类久久| 破处在线观看欧美一区| 国产精品一区二区白浆| 日韩有码视频免费观看| 东京热.com| 国产综合欧美自拍| 久久99国内精品| 超碰人人操人人摸| 国产亚洲精品综合一区91| 国模 在线播放| 蜜桃视频一区高清视频| 色欲色香天天综合| 亚洲精品国精品久久99热| _本道精品成人| 婷婷丁香社区| 美亚洲中久久| 东北少妇高潮| 日韩精品国产剧情| 国产成人精品亚洲日本语言| 欧美色欲一区| 总裁短剧推荐| 亚洲热少妇| 亚洲欧美第九十页| 中国熟女黄色视频| 久久精品,亚洲无码| 久久天天躁狠狠躁夜夜躁2020| 精品在线视频5| 午夜探花| 永久免费无码日韩视频| 丁香七月婷婷综合激情| 高潮了| 欧美老熟妇精品| 男生夜间福利视频| 午夜男女很黄的视频| 国模裸体视频网| freexxx国产天美传媒国产| 美女在线一区二区三区| 日韩黄色大片免费观看| 亚洲熟妇无码八V在线播放| 大狠狠大臿蕉香蕉大视频|