二叉树 递归 洛谷P1364

洛谷P1364

#include<bits/stdc++.h>
using namespace std;
struct node{
    int value, left, right, p;
    node(int v, int l, int r): left(l), right(r), value(v){}
    node() {}
}t[10010];
int vis[105];
int cal(int x, int d) {
    if (!x || vis[x]) return 0;
    vis[x] = 1;
    return cal(t[x].left, d+1) + cal(t[x].right, d+1) + cal(t[x].p, d+1) + t[x].value*d;
}
//递归计算,若被访问过或没有改节点返回,然后计算父节点,左右子节点。

int main() {
    int ans = 0xfffffff;
    int n; cin >> n;
    for (int i = 1; i <= n; i++) {
        int v, l, r;
        cin >> v >> l >> r;
        t[i] = node(v, l, r);
    }
    for (int i = 1; i <= n; i++) {
        t[t[i].left].p = i;
        t[t[i].right].p = i;
    }
    for (int i = 1; i <= n; i++) {
        memset(vis, 0, sizeof(vis));
        ans = min(ans, cal(i, 0));
    }
    cout << ans;
}

posted @   若把你比作歌  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示