题解 | #二叉树中的最大路径和#
二叉树中的最大路径和
https://www.nowcoder.com/practice/8fda1d22554f4824b0ef9c26f35e54dd
#include <bits/stdc++.h> using namespace std; //构建树结构 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int _val):val(_val),left(nullptr),right(nullptr) {} }; int maxRes; //全局变量,用来记录最大结果 //计算每个节点的贡献值,采用递归的方式,深度优先逐个节点进行计算,找出最大值 int traverse(TreeNode* root) { if(root == nullptr) return 0; int Left_val = max(traverse(root->left),0); int Right_val = max(traverse(root->right),0); int sum = root->val + Left_val + Right_val; maxRes = max(maxRes,sum); return root->val + max(Left_val,Right_val); } int main() { int n; while(cin>>n) { maxRes = INT_MIN; vector<TreeNode *> trees; for(int i = 0;i<n;++i) { int val; cin>>val; trees.emplace_back(new TreeNode(val)); } //用来找到哪个节点是根节点 int root; //根据相关关系来构造树的关系并且找到树的根节点 for(int i = 0;i<n;++i) { int father; cin>>father; if(father == 0) { root = i; } else { if(trees[father-1]->left == nullptr) { trees[father-1]->left = trees[i]; } else { trees[father-1]->right = trees[i]; } } } TreeNode * root_tree = trees[root]; traverse(root_tree); cout<<maxRes<<endl; } }
搜索
复制