点击:题目链接:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和 。
思路
我们可以用深度优先搜索,遍历每个节点,再求和,然后找出最大的路径和
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public: int maxPathSum(TreeNode* root) { dfs(root); return max_val; }
private: int max_val = INT_MIN; int dfs(TreeNode* root) { if (root == nullptr) return 0;
int left = max(dfs(root->left),0); int right = max(dfs(root->right),0);
int sum = max(root->val, (root->val + left + right)); max_val = max(max_val, sum);
return root->val+max(left, right); } };
|
复杂度
时间,O(N), 空间O(N)