對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。
格式該圖包含 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]
首先建立圖,記錄每兩個節點是否相連,並且記錄每個節點的度。
遍歷所有節點,如果度為1,表示該節點是葉子節點(假設這個節點不是根節點),則記錄該節點,找到所有度為1的節點,然後從圖中刪除這些度為1的節點。
上述過程相當於是剝洋蔥,每次將最外面的節點剝離,剝到最後,即是最中心位置答案。
重複上述過程,直到剩餘的節點個數小於等於2.(剩了1個節點必定是最中間的點,剩了兩個節點則表示最長串是偶數,兩個節點都可以看作是中心節點)
class
solution
public
: vector<
int>
findminheighttrees
(int n, vectorint>>
& edges)
while
(count >2)
}// 刪除節點(相當於將洋蔥皮剝離)
for(
int i =
0; i < leaf.
size()
;++i)}}
}
vector<
int> res;
// 找到沒有被刪除的點,就是中心節點
for(
int i =
0; i < n;
++i)
return res;}}
;
Leetcode 310 最小高度樹
對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。格式該圖包含 n 個節點,標記為 0 到 n 1。給定數字 n 和乙個無向邊 edges 列表 每乙個...
leetcode 310 最小高度樹
對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。格式該圖包含 n 個節點,標記為 0 到 n 1。給定數字 n 和乙個無向邊 edges 列表 每乙個...
leetcode 310 最小高度樹
樹是乙個無向圖,其中任何兩個頂點只通過一條路徑連線。換句話說,乙個任何沒有簡單環路的連通圖都是一棵樹。給你一棵包含 n 個節點的數,標記為 0 到 n 1 給定數字 n 和乙個有 n 1 條無向邊的 edges 列表 每乙個邊都是一對標籤 其中 edges i ai,bi 表示樹中節點 ai 和 b...