From 4bc361ff63346aa09205a8b50f98a9c9627fbf25 Mon Sep 17 00:00:00 2001 From: Aakanksha Garg <2024ucs0077@iitjammu.ac.in> Date: Mon, 27 Oct 2025 06:10:35 +0000 Subject: [PATCH] added soln for tree diameter --- 9_tree_algorithms/tree_diameter.cpp | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 9_tree_algorithms/tree_diameter.cpp diff --git a/9_tree_algorithms/tree_diameter.cpp b/9_tree_algorithms/tree_diameter.cpp new file mode 100644 index 0000000..5d99571 --- /dev/null +++ b/9_tree_algorithms/tree_diameter.cpp @@ -0,0 +1,63 @@ +#include +#include +#include +#include + +using namespace std; + +int n; +vector> adj; + +pair bfs(int start_node) { + vector dist(n + 1, -1); + queue q; + + q.push(start_node); + dist[start_node] = 0; + + int farthest_node = start_node; + int max_dist = 0; + + while (!q.empty()) { + int u = q.front(); + q.pop(); + + if (dist[u] > max_dist) { + max_dist = dist[u]; + farthest_node = u; + } + + for (int v : adj[u]) { + if (dist[v] == -1) { + dist[v] = dist[u] + 1; + q.push(v); + } + } + } + return {farthest_node, max_dist}; +} + +int main() { + ios_base::sync_with_stdio(false); + cin.tie(NULL); + + cin >> n; + adj.resize(n + 1); + + for (int i = 0; i < n - 1; ++i) { + int a, b; + cin >> a >> b; + adj[a].push_back(b); + adj[b].push_back(a); + } + + pair first_bfs_result = bfs(1); + int farthest_node_from_1 = first_bfs_result.first; + + pair second_bfs_result = bfs(farthest_node_from_1); + int diameter = second_bfs_result.second; + + cout << diameter << "\n"; + + return 0; +} \ No newline at end of file