微軟面試100題 自做

2021-06-09 00:37:18 字數 1784 閱讀 1615

由於發現題集具有很好的借鑑效果,整個題目乃至答案如下:

1.把二元查詢樹轉變成排序的雙向鍊錶(樹)

題目:輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。

要求不能建立任何新的結點,只調整指標的指向。

10/ /

6  14

/ / / /

4  8 12 16

轉換成雙向鍊錶

4=6=8=10=12=14=16。

首先我們定義的二元查詢樹 節點的資料結構如下:

struct bstreenode;

我個人的**: 

struct bstreenode

;bstreenode* bstree= new bstreenode;//notice this; claim it obviously

void build_tree(bstreenode* bstree);//build a tree

void convert_tree2chain(bstreenode* bstree);

int _tmain(int argc, _tchar* argv)

void build_tree(bstreenode* bstree)

if(count==0)

else if(bstree->m_nvaluem_pleft==null)

//本人程式與答案者的一大區別在於條件的判斷上,null==bstree->m_nvalue,能夠防止產生相應的筆誤賦值錯誤,還是這樣防錯性比較好

else if(bstree->m_nvalue>tmp&&bstree->m_pright==null)

else if(bstree->m_nvaluem_pleft!=null)

else if(bstree->m_nvalue>tmp&&bstree->m_pright!=null)}}

void convert_tree2chain(bstreenode* bstree)

}while(bstree->m_pright!=null)

}convert_tree2chain(temp->m_pleft);

convert_tree2chain(temp->m_pright);}

與其中答案的對比:

#include

#include

struct bstreenode

;typedef bstreenode doublelist;

doublelist * phead;

doublelist * plistindex;

void converttodoublelist(bstreenode * pcurrent);

// 建立二元查詢樹

void addbstreenode(bstreenode * & pcurrent, int value)

else 

else if ((pcurrent->m_nvalue) < value)

else

if (null != pcurrent->m_pleft)

// 節點接到鍊錶尾部

converttodoublelist(pcurrent);

// 右子樹為空

if (null != pcurrent->m_pright)

}// 二叉樹轉換成list

void  converttodoublelist(bstreenode * pcurrent)

else

plistindex = pcurrent;

cout

微軟面試100題

41.求固晶機的晶元查詢程式 晶元盤由數目不詳的大小一樣的晶元組成,晶元並不一定全布滿晶元盤,照相機每次這能匹配乙個晶元,如匹配過,則拾取該晶元,若匹配不過,照相機則按測好的晶元間距移到下乙個位置。求遍歷晶元盤的演算法 求思路。兩個非降序鍊錶的並集,1 2 3 和 2 3 5 並為 1 2 3 5 ...

微軟面試100題 64

64.尋找醜數 運算 題目 我們把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第1500個醜數。分析 這是一道在網路上廣為流傳的面試題,據說google曾經採用過這道題。package...

微軟面試100題 9

題目 輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。如果是返回true,否則返回false。例如輸入5 7 6 9 11 10 8,由於這一整數序列是如下樹的後序遍歷結果 8 6 10 5 7 9 11 因此返回true。如果輸入7 4 6 5,沒有哪棵樹的後序遍歷的結果是這個序列...