Minimum Height Trees

題目來源
給一個圖,求一個根節點使得這棵樹的高度最低。
頭還有點暈…感覺不能思考…這道題怎么做,看了tags還是不懂。
看看討論區吧。
主要是一個廣度優先搜索的思想,設置多個指針,從葉子節點往里遍歷,直到最后只剩下倆指針指向同一個節點或者相差一個節點。
代碼如下:

class Solution {
public:
    vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) {
        if (n == 1)
            return vector<int>{0};
        unordered_map<int, unordered_set<int>> adj;
        for (auto edge : edges) {
            adj[edge.first].insert(edge.second);
            adj[edge.second].insert(edge.first);
        }
        vector<int> leaves;
        for (auto item : adj) {
            if (item.second.size() == 1)
                leaves.push_back(item.first);
        }
        while (n > 2) {
            n -= leaves.size();
            vector<int> newLeaves;
            for (auto leaf : leaves) {
                int nextNode = *adj[leaf].begin();
                adj[leaf].erase(nextNode);
                adj[nextNode].erase(leaf);
                if (adj[nextNode].size() == 1)
                    newLeaves.push_back(nextNode);
            }
            leaves = newLeaves;
        }
        return leaves;
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容