leetcode310 最小高度樹

2021-10-05 23:18:52 字數 1370 閱讀 7260

對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。

格式該圖包含 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...