LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
题目描述
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3]
1
/ \
2 3
输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
输出: 42
解题思路
利用后序遍历的思想,先分别求出左右子树中由根节点发出的最大路径,然后记录当前的最大路径和为根节点加左右路径和的最大值,再返回当前子树由根节点发出的最大路径和。
代码
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 int findPath(TreeNode* root, int &maxSum){ 13 int left = 0, right = 0, val = root->val; 14 if(root->left){ 15 left = findPath(root->left, maxSum); 16 if(left > 0) val += left; 17 } 18 if(root->right){ 19 right = findPath(root->right, maxSum); 20 if(right > 0) val += right; 21 } 22 maxSum = max(maxSum, val); 23 return max(root->val, root->val + max(left, right)); 24 } 25 int maxPathSum(TreeNode* root) { 26 if(root == NULL) return 0; 27 int maxSum = INT_MIN; 28 findPath(root, maxSum); 29 return maxSum; 30 } 31 };