從二叉樹的節點a出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點b時,路徑上的節點數叫作a到b的距離。對於給定的一棵二叉樹,求整棵樹上節點間的最大距離。
給定乙個二叉樹的頭結點root,請返回最大距離。保證點數大於等於2小於等於500.
思路:修改後序遍歷
對於給定的節點root,最遠距離只可能來自以下三種情況:
1、左子樹的最遠距離
2、右子樹的最遠距離
3、左子樹上距離root最遠長度和右子樹上距離root最遠長度之和加1;
遞迴遍歷即可。每個遞迴返回兩個值,乙個是距離root的最遠距離,另乙個是以root為頭節點的樹上最遠距離,使用動態陣列或者vector,不能直接返回陣列指標,每個區域性函式執行完記憶體就釋放掉了。
計算結點root所在子樹的最長距離,需要已知:左子樹的最長距離left[0],左子樹的高度left[1];右子樹的最長距離right[0],右子樹的高度right[1].
然後比較max(left[0],right[0],(left[1]+right[1]+1)),最大值就是這棵二叉樹的最大距離,即對於每個子樹,需要求出它的最大距離和最大高度。
可以使用遞迴來實現,求出這個根結點的最大距離a[0]和最大高度a[1]並返回這2個數值。其中a[0]= max(left[0],right[0],(left[1]+right[1]+1));
而由於要返回這棵子樹的高度,如何求子樹的高度呢?二叉樹的高度就是它的2個子樹高度中的較大值再加上1,即a[1]=max(left[1], right[1])+1;
/*
struct treenode
};*/
class longestdistance
vectorgetdist(treenode* root)
};
/*
struct treenode
};*/
class longestdistance
int getmaxdist(treenode* node,int& dist)
};
樹上最遠距離練習
從二叉樹的節點a出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點b時,路徑上的節點數叫作a到b的距離。對於給定的一棵二叉樹,求整棵樹上節點間的最大距離。給定乙個二叉樹的頭結點root,請返回最大距離。保證點數大於等於2小於等於500.對於給定的節點root,最遠距離只可能來自以下三種情...
最遠距離(C 實現)
給定一組點 x,y 求距離最遠的兩個點之間的距離。輸入 第一行是點數n n大於等於2 接著每一行代表乙個點,由兩個浮點數x,y組成。輸出 輸出一行是最遠兩點之間的距離。樣例輸出 6 34.0 23.0 28.1 21.6 14.7 17.1 17.0 27.2 34.7 67.1 29.3 65.1...
樹的直徑(最遠距離)
輸入資料 5 51 2 2 2 4 3 2 5 1 4 5 4 1 3 5 有5個點5條邊 第一次bfs從1號點開始找到最遠距離3號距離為5 第二次bfs從3號點開始找最遠距離點10 include include include define max 100000 using namespace ...