SDNU 1015.最遠路徑

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";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章