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

2022-08-17 07:42:17 字數 1055 閱讀 8537

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

解法:用遞迴的方法

1

//資料結構定義

2struct

node3;

1011

int nmaxlen = 0;12

13//

尋找樹中最長的兩段距離

14void findmaxlen(node*proot)

1521

22//

如果左子樹為空,那麼該節點的左邊最長距離為0

23if(proot -> pleft ==null)

2427

28//

如果右子樹為空,那麼該節點的右邊最長距離為0

29if(proot -> pright ==null)

3033

34//

如果左子樹不為空,遞迴尋找左子樹最長距離

35if(proot -> pleft !=null)

3639

40//

如果右子樹不為空,遞迴尋找右子樹最長距離

41if(proot -> pright !=null)

4245

46//

計算左子樹最長節點距離

47if(proot -> pleft !=null)

4854

else

5558 proot -> nmaxleft = ntempmax + 1;59

}6061//

計算右子樹最長節點距離

62if(proot -> pright !=null)

6369

else

7073 proot -> nmaxright = ntempmax + 1;74

}7576//

更新最長距離

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

7881 }

可以參考這個 

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

1.問題描述 寫乙個程式求一棵二叉樹相距最遠的兩個節點之間的距離 如下圖 2.分析與解法 對於任意乙個節點,以該節點為根,假設這個根有k個孩子節點,那麼距離最遠的兩個節點u與v之間的路徑與這個根節點的關係有兩種。1 若路徑經過root,則u和v屬於不同子樹的,且它們都是該子樹中到根節點最遠的節點,否...

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

1.問題描述 寫乙個程式求一棵二叉樹相距最遠的兩個節點之間的距離 如下圖 2.分析與解法 對於任意乙個節點,以該節點為根,假設這個根有k個孩子節點,那麼距離最遠的兩個節點u與v之間的路徑與這個根節點的關係有兩種。1 若路徑經過root,則u和v是屬於不同子樹的,且它們都是該子樹中到根節點最遠的節點,...

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

如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義 距離 為兩節點之間邊的個數。寫乙個程式求一棵二叉樹中相距最遠的兩個節點之間的距離。include using namespace std struct node int nmaxlen 0 尋找樹中最長的兩段距離 void f...