程式設計之美3 8 求二叉樹中節點的最大距離

2021-06-18 01:01:48 字數 1191 閱讀 6608

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

#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屬於不同子樹的,且它們都是該子樹中到根節點最遠的節點,否...