SDNU 1015.最遠路徑
Time Limit: 1000 MS Memory Limit: 32768 KB
Total Submission(s): 303 Accepted Submission(s): 124
Description
有一棵有n個節點的二叉樹,它的節點編號爲1到n,根節點編號是1,它的每條邊都有一個給定的長度。請你求出該二叉樹中距離根節點最遠的節點的距離。
Input
第1行:一個數字n(1 <= n <= 100),表示該二叉樹節點的數量。
第2至第n+1行:每行有三個整數(不會超過int),第i 行中的三個整數分別表示編號爲i-1的節點與其父節點之間邊的長度、編號爲i-1的節點左孩子的編號和編號爲i-1的節點右孩子的編號。
Output
最遠的距離。
Sample Input
7
0 2 3
1 4 5
3 6 7
4 0 0
6 0 0
3 0 0
2 0 0
Sample Output
7
給你一棵二叉樹,用dfs遍歷一下,代碼是最近學了數據結構之後寫的,用別的方法也可以。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node
{
int data;
int lchild, rchild;
} tree[2 * 110];
int ans = -1;
void dfs(int k, int sum)
{
sum += tree[k].data;
if (sum > ans)
ans = sum;
if (tree[k].lchild != 0)
dfs(tree[k].lchild, sum);
if (tree[k].rchild != 0)
dfs(tree[k].rchild, sum);
}
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> tree[i].data >> tree[i].lchild >> tree[i].rchild;
}
dfs(1, 0);
cout << ans << "\n";
}