微軟等資料結構與演算法面試100題 第十一題

2021-12-29 21:35:50 字數 951 閱讀 5454

第十一題

題目:求二叉樹中節點的最大距離...

如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,

我們姑且定義"距離"為兩節點之間邊的個數。

寫乙個程式,

求一棵二叉樹中相距最遠的兩個節點之間的距離。

分析:對本題而言,有上面兩種情況,乙個是最大長度的節點裡面沒有根節點,乙個是有根節點。

如何求解樹中節點的最大距離?-->轉換成求解每個節點的左子樹的深度和右子樹的深度問題,可以通過求解每個節點的左右子樹的深度,然後將左右深度之和作為最大長度,

然後更新最大長度。

對於圖a,根節點的左子樹的深度為3,右子樹的深度為3,因此最大長度為6,

對於圖b,不妨設根節點的左兒子節點為t,t的左子樹的深度為2,右子樹的深度為2,因此最大長度為4。

所以,我們只需要求解每個節點的左子樹深度和右子樹深度,然後不斷更新最大長度即可。

**:構建的二叉樹為圖a

[cpp] 

#include 

using namespace std; 

struct nodebtree ;  

int maxnum(int comp_a, int comp_b) 

void updatemaxdepthlr(nodebtree * btreehead, int &maxlength) 

if(null!=btreehead->nodebtreeleft) 

else 

if(null!=btreehead->nodebtreeright) 

else 

if(btreehead->maxdepthright + btreehead->maxdepthleft >maxlength) 

maxlength = btreehead->maxdepthright + btreehead->maxdepthleft; 

} int main() 

微軟等資料結構與演算法面試100題 第五題

第五題 查詢最小的k個元素 題目 輸入n個整數,輸出其中最小的k個。例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。分析 本題目要求計算n個整數的最小的k個,題目沒有直接給出複雜度的要求,因此有很多種解法。比如排序後一次輸出等 很多種解法。如果是要求複雜度為klo...

微軟等資料結構與演算法面試100題 第七題

第七題 微軟亞院之程式設計判斷倆個鍊錶是否相交 給出倆個單向鍊錶的頭指標,比如h1,h2,判斷這倆個鍊錶是否相交。為了簡化問題,我們假設倆個鍊錶均不帶環。問題擴充套件 1.如果鍊錶可能有環列?2.如果需要求出倆個鍊錶相交的第乙個節點列?分析 實現 includeusing namespace std...

微軟等資料結構與演算法面試100題 第十題

第十題 翻轉句子中單詞的順序。題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入 i am a student.則輸出 student.a am i 分析 可以根據空格符將單詞分開,然後針對每個單詞進行操作,...