第十一題
題目:求二叉樹中節點的最大距離...
如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,
我們姑且定義"距離"為兩節點之間邊的個數。
寫乙個程式,
求一棵二叉樹中相距最遠的兩個節點之間的距離。
分析:對本題而言,有上面兩種情況,乙個是最大長度的節點裡面沒有根節點,乙個是有根節點。
如何求解樹中節點的最大距離?-->轉換成求解每個節點的左子樹的深度和右子樹的深度問題,可以通過求解每個節點的左右子樹的深度,然後將左右深度之和作為最大長度,
然後更新最大長度。
對於圖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 分析 可以根據空格符將單詞分開,然後針對每個單詞進行操作,...