對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。
格式該圖包含 n 個節點,標記為 0 到 n - 1。給定數字 n 和乙個無向邊 edges 列表(每乙個邊都是一對標籤)。
你可以假設沒有重複的邊會出現在 edges 中。由於所有的邊都是無向邊, [0, 1]和 [1, 0] 是相同的,因此不會同時出現在 edges 裡。
示例 1:
輸入: n =
4, edges =[[
1,0]
,[1,
2],[
1,3]
]0|1
/ \ 2
3 輸出:[1
]
示例 2:
輸入: n =
6, edges =[[
0,3]
,[1,
3],[
2,3]
,[4,
3],[
5,4]
]012
\ |/3
|4|5
輸出:[3,
4]
說明:
先來說下這道題:題目中給的圖的結構一定能夠轉化成一棵樹,並且可以以任何乙個節點為根(看題目要求),所謂最小高度樹就是以圖中每乙個節點為根的樹的最長路徑(樹的高度)中最短的
暴力思想:求以每乙個節點為根的樹的高度,可以bfs,也可以dfs,這兩種思想都超時了,就不再給出**了。
巧妙思想:一層一層刪除度為1的節點,節點刪除了,對應的邊也遞減,當剩下的節點不超過兩個節點時,就是結果。這裡有點像拓撲排序。
class
solution
; vectorint>>
graph
(n);
vector<
int>
degree
(n,0);
for(
auto e : edges)
queue<
int> q;
int cnt = n;
for(
int i =
0; i < n;
++i)
}while
(cnt >2)
}}}}
vector<
int> res;
while
(!q.
empty()
)return res;}}
;
Leetcode 310 最小高度樹
對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。格式該圖包含 n 個節點,標記為 0 到 n 1。給定數字 n 和乙個無向邊 edges 列表 每乙個...
leetcode 310 最小高度樹
對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。格式該圖包含 n 個節點,標記為 0 到 n 1。給定數字 n 和乙個無向邊 edges 列表 每乙個...
leetcode310 最小高度樹
對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。格式該圖包含 n 個節點,標記為 0 到 n 1。給定數字 n 和乙個無向邊 edges 列表 每乙個...