int max_path_sum(TreeNode *root, int &max_sum){ if(root == NULL) return 0; int left = max_path_sum(root->left, max_sum); int right = max_path_sum(root->right, max_sum); if(left < 0) left = 0; if(right < 0) right = 0; if(left + right + root->val > max_sum) max_sum = left + right + root->val; if(left > right) return left + root->val; else return right + root->val; }
void max_path_sum(TreeNode *node, int &tmp_sum, int &max_sum) { if (node == NULL) { tmp_sum = 0; return ; } int left_sum = 0; int right_sum = 0; max_path_sum(node->left, left_sum, max_sum); max_path_sum(node->right, right_sum, max_sum); tmp_sum = max(node->val, max(node->val + left_sum, node->val + right_sum)); max_sum = max(max_sum, max(tmp_sum, node->val + left_sum + right_sum)); }
int main(int argc, char const* argv[]) { node *tree = prepare_tree(); printf("max path sum = %d\n",max_path_sum(tree)); printf("expected value = 20\n"); return 0; }
int maxPathSum(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function int max_sum = INT_MIN; max_path_sum(root, max_sum); return max_sum; }
int maxPathSum(TreeNode *root) { int max_sum = INT_MIN; int tmp_sum; max_path_sum(root, tmp_sum, max_sum); return max_sum; }