题解 | #二叉树中的最大路径和#

二叉树中的最大路径和

https://www.nowcoder.com/practice/8fda1d22554f4824b0ef9c26f35e54dd

#include <bits/stdc++.h>
using namespace std;
int ans=INT_MIN;
int dfs(vector<vector<int>>& val,int i){
    if(i==0){
        return 0;
    }
    int left=max(dfs(val,val[1][i]),0);
    int right=max(dfs(val,val[2][i]),0);
    int sum=left+right+val[0][i];
    ans=max(ans,sum);
    return max(left,right)+val[0][i];
}

int main() {
    int n;
    cin>>n;
    vector<vector<int>> val(3,vector<int>(n+1,0));
    for(int i=1;i<=n;i++){
        cin>>val[0][i];
    }
    for(int i=1;i<=n;i++){
        int temp;
        cin>>temp;
        if(val[1][temp]==0){
            val[1][temp]=i;
        }else{
            val[2][temp]=i;
        }
    }
    
    dfs(val,1);
    cout<<ans<<endl;
    return 0;

}
// 64 位输出请用 printf("%lld")

把存储方式变成 父->子 之后,和leetcode LCR051一模一样,我只会用这种方式遍历二叉树。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务