牛客網 高頻面試題 樹的直徑

2021-10-17 05:22:03 字數 1603 閱讀 5517

樹的直徑_牛客網

題目描述

給定一棵樹,求出這棵樹的直徑,即樹上最遠兩點的距離。

示例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個數 我是一塊小石頭 ...