×【leetcode】Binary Tree Maximum Path Sum

鏈接:https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/


描述:

Given a binary tree, find the maximum path sum.

The path may start and end at any node in the tree.

For example:
Given the below binary tree,

       1
      / \
     2   3

Return 6.


解法:

遞歸求解,

每一個遞歸返回兩個值,一個值是以該節點爲根的樹中的最大和,另一個值是一該節點爲某一起始點的最大路徑。

此題思路需要十分清晰,容易出錯。另注意樹中含有負數的情況。


代碼如下:


    int maxPathSum(TreeNode *root) {
    	if(root == NULL) return 0;
    	if(root->left == NULL && root->right == NULL) return root->val;
    	int result = 0;
    	maxSum(root, result);
    	return result;
    }
    

    int maxSum(TreeNode* root, int &maxsum)
    {
    	if( root == NULL) {
    		maxsum = INT_MIN;
    		return 0;
    	}
    
    	int leftsum = INT_MIN, rightsum = INT_MIN;
    	int left = maxSum(root->left, leftsum);
    	int right = maxSum(root->right, rightsum);
    	int sum = root->val;
    	if( left > 0)
    		sum += left;
    	if(right > 0)
    		sum += right;
    	maxsum = max(leftsum, rightsum);
    	maxsum = max(maxsum, sum);
    	return max(left, right) > 0 ? max(left, right) + root->val : root->val;;
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章