如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義"距離"為兩節點之間邊的個數。寫乙個程式求一棵二叉樹中相距最遠的兩個節點之間的距離。
#include using namespace std;
struct node
};int nmaxlen = 0;
// 尋找樹中最長的兩段距離
void findmaxlen(node* proot)
// 如果左子樹為空,那麼該節點的左邊最長距離為0
if(proot -> pleft == null)
// 如果右子樹為空,那麼該節點的右邊最長距離為0
if(proot -> pright == null)
// 如果左子樹不為空,遞迴尋找左子樹最長距離
if(proot -> pleft != null)
// 如果右子樹不為空,遞迴尋找右子樹最長距離
if(proot -> pright != null)
// 計算左子樹最長節點距離
if(proot -> pleft != null)
else
proot -> nmaxleft = ntempmax + 1;
} // 計算右子樹最長節點距離
if(proot -> pright != null)
else
proot -> nmaxright = ntempmax + 1;
} // 更新最長距離
if(proot -> nmaxleft + proot -> nmaxright > nmaxlen) }
int main()
node[0].pleft = &node[1];
node[0].pright = &node[8];
node[1].pleft = &node[2];
node[1].pright = &node[5];
node[2].pleft = &node[3];
node[3].pleft = &node[4];
node[5].pright = &node[6];
node[6].pright = &node[7];
findmaxlen(&node[0]);
cout << nmaxlen << endl;
return 0;
}
二叉樹中節點的最大的距離(程式設計之美3 8)
問題定義 把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,定義 距離 為兩個節點之間的邊數。例如下圖中最大距離為紅線的條數為6.分析 定義 過以節點x作為根節點的子樹中,節點間的最大距離為dis x 上圖,左圖中dis 根節點 最大,右圖中dis 根節點 left 最大。從上邊可以看出每個節點都...
二叉樹中節點的最大的距離(程式設計之美3 8)
問題定義 把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,定義 距離 為兩個節點之間的邊數。例如下圖中最大距離為紅線的條數為6.分析 定義 過以節點x作為根節點的子樹中,節點間的最大距離為dis x 上圖,左圖中dis 根節點 最大,右圖中dis 根節點 left 最大。從上邊可以看出每個節點都...
程式設計之美 求二叉樹中節點的最大距離
1.問題描述 寫乙個程式求一棵二叉樹相距最遠的兩個節點之間的距離 如下圖 2.分析與解法 對於任意乙個節點,以該節點為根,假設這個根有k個孩子節點,那麼距離最遠的兩個節點u與v之間的路徑與這個根節點的關係有兩種。1 若路徑經過root,則u和v屬於不同子樹的,且它們都是該子樹中到根節點最遠的節點,否...