樹的直徑_牛客網
題目描述
給定一棵樹,求出這棵樹的直徑,即樹上最遠兩點的距離。
示例1的樹如下圖所示。其中4到5之間的路徑最長,是樹的直徑,距離為5+2+4=11
示例1輸入
複製6,[
[0,1],[1,5],[1,2],[2,3],[2,4]
],[3,4,2,1,5]
返回值複製
11
先遍歷樹,構建乙個無向圖~
後序遍歷更新樹的直徑。某節點直徑=左孩子深度+右孩子深度
/**
* struct interval ;
*/class
solution}if
(children.
size()
==0)//降序排序
sort
(children.
begin()
,children.
end(
),greater<
int>()
);int len = children[0]
;int maxlen = len;
if(children.
size()
>1)
//更新最大直徑
res =
max(maxlen,res)
;return len;
}/**
* 樹的直徑
* @param n int整型 樹的節點個數
* @param tree_edge interval類vector 樹的邊
* @param edge_value int整型vector 邊的權值
* @return int整型
*/intsolve
(int n, vector
& tree_edge, vector<
int>
& edge_value)
//tree:各條邊的起點為key,以(邊的終點,權值)為value
unordered_map<
int, vectorint,
int>>
> tree;
//遍歷樹
for(
int i=
0;isize()
;i++)if
(tree.
find
(edge.end)
== tree.
end())
//往tree中新增節點資訊(雙向)。
tree[edge.start]
.push_back
(make_pair
(edge.end,value));
tree[edge.end]
.push_back
(make_pair
(edge.start,value));
}int res =0;
int root = tree_edge[0]
.start;
//後續遍歷
postorder
(tree,root,res,root)
;return res;}}
;
牛客網(面試題)
每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮...
牛客網 高頻面試題 設計LRU快取結構
設計lru快取結構 牛客網 示例1 輸入 1 1,1 1 2,2 1 3,2 2 1 1,4 4 2,2 3 返回值 1,1 說明 第一次操作後 最常使用的記錄為 1 1 第二次操作後 最常使用的記錄為 2 2 1 1 變為最不常用的 第三次操作後 最常使用的記錄為 3 2 1 1 還是最不常用的 ...
牛客網 高頻面試題 尋找第K大
尋找第k大 牛客網 有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。給定乙個整數陣列a,同時給定它的大小n和要找的k k在1到n之間 請返回第k大的數,保證答案存在。示例1輸入 1 3,5 2,2 5,3返回值 2和這篇部落格思路類似 牛客網 高頻面試題 最小的k個數 我是一塊小石頭 ...