對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。
格式該圖包含 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]]
0 1 2
\ | /3|
4|
5
輸出: [3, 4]
說明:根據樹的定義,樹是乙個無向圖,其中任何兩個頂點只通過一條路徑連線。 換句話說,乙個任何沒有簡單環路的連通圖都是一棵樹。
樹的高度是指根節點和葉子節點之間最長向下路徑上邊的數量。
思路 拓撲序列 每次除去度為1 的節點 最後剩下的節點就是生成樹的根節點
class solution
// 有n個節點 所以進行初始化
for(
int i=
0;i)// 每個節點都有乙個度
int[
] degree = new int
[n];
// edgs[0] 代表第一組 邊 edgs[0][0] :第一組邊的第乙個節點 edgs[0][1] :第一組邊中的第二個節點
for(
int i=
0;i)// bfs 必備佇列
queue queue = new linkedlist<
>()
;// 3.在佇列中加入第乙個滿足條件的元素
for(
int i =
0;i < n;i++)}
//進入while迴圈 剪枝更新
while
(!queue.
isempty()
)}}}
system.out.
println
("ans is "
+ ans)
;return ans;
}}
leetcode310 最小高度樹(bfs)
對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。格式該圖包含 n 個節點,標記為 0 到 n 1。給定數字 n 和乙個無向邊 edges 列表 每乙個...
310 最小高度樹
對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。格式該圖包含n個節點,標記為0到n 1。給定數字n和乙個無向邊edges列表 每乙個邊都是一對標籤 你...
Leetcode 310 最小高度樹
對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。格式該圖包含 n 個節點,標記為 0 到 n 1。給定數字 n 和乙個無向邊 edges 列表 每乙個...