思路 : 一遍 dfs 可以求到以任意乙個點為根,所有點所含孩子的個數,cnt陣列記錄
考慮每一條邊的貢獻時,即此邊左右節點數相乘
第2遍 dfs, 以其他點為根時,例如以2為根,先去掉 0-1 邊的貢獻,再加上以2為根 0和1 對 2 的貢獻
**示例 :
class solution}cnt[x] += sum;
}void dfs2(int x, int n)}}
vectorsumofdistancesintree(int n, vector>& edges)
memset(cnt, 0, sizeof(cnt));
memset(pt, 0, sizeof(pt));
dfs(0);
memset(pt, 0, sizeof(pt));
dfs2(0, n);
for(int i = 0; i < n; i++)
return sum;}};
求任意一顆二叉樹的繁茂度
在 資料結構 嚴蔚敏版上的習題看到這個問題。繁茂度的定義 各層節點數的最大值與樹的高度的乘積 樹的深度好求,遞迴呼叫就行了。關鍵在於如何求出各層的最大節點樹?下面是我的一種實現方法 bitree.h include include include include using namespace st...
一棵樹是否為另一顆樹的子結構
題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 分析 一開始我把子結構理解成一棵樹得在另一顆樹的末端才算是子結構,後來看了討論區發現可以位於樹的中間位置。深度遍歷二叉樹知道找到a的乙個結點值等於b的根節點的值,然後判斷從這兩個結點開始對比,b是否在a...
二叉搜尋樹 (判斷是否為同一顆搜尋樹)
判斷兩序列是否為同一二叉搜尋樹序列 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組...