微軟100題(11) 二叉樹中節點的最大距離

2021-07-02 19:31:00 字數 780 閱讀 9608

題目:

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

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

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

寫乙個程式,

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

我覺得相隔最遠的 應該是左子樹最深的 和 右子樹最深的結點之間

所以轉變為求左子樹深度 和 右子樹深度 最長距離為左右子樹深度之和

int treedepth(binarytreenode* proot)

但是這種想法是錯誤的,如果樹是這樣的a

/  b/  \

c    d

/     /  \

g    e   f

最遠距離不是左右子樹深度之和,而是g和f,屬於b節點的左右子樹之和,所以需要對每個節點進行計算,然後判斷是否是最大值。

struct node

;int nmaxlen = 0;

// 尋找樹中最長的兩段距離

void findmaxlen(node* proot)

// 計算右子樹最長節點距離

if(proot -> pright != null)

// 更新最長距離

if(proot -> nmaxleft + proot -> nmaxright > nmaxlen)

nmaxlen = proot -> nmaxleft + proot -> nmaxright;

}

微軟100題 求二叉樹中節點的最大距離

如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義 距離 為兩節點之間邊的個數。寫乙個程式,求一棵二叉樹中相距最遠的兩個節點之間的距離。package test public class nodepackage test public class resultpackage t...

面試100題 11 求二叉樹中節點的最大距離

題目 寫乙個程式,求一棵二叉樹中相距最遠的兩個節點之間的距離。如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義 距離 為兩節點之間邊的個數。分析 把最深的左子樹距離加上最深的右子樹距離就是二叉樹中兩個節點的最大距離。解一 getmaxpathfrombst title 11....

二叉樹11 二叉樹的深度

題目 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。思路 所謂的深度是指從根結點到葉子結點的最長的路徑的長度,即路徑上的結點的數目。分析問題,輸入根結點root,求它的深度需要先求出root左右子樹的深度,取其較大值,然後加1...