如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義"距離"為兩節點之間邊的個數。寫乙個程式求一棵二叉樹中相距最遠的兩個節點之間的距離。
解法:用遞迴的方法
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...