日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Binary Tree Maximum Path Sum】cpp

發布時間:2025/1/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Binary Tree Maximum Path Sum】cpp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

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.

代碼:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:int maxPathSum(TreeNode* root){int max_sum = INT_MIN;Solution::dfs4MaxSum(root, max_sum);return max_sum;}static int dfs4MaxSum(TreeNode* root, int& max_sum){int ret=0;if ( !root ) return ret;int l = Solution::dfs4MaxSum(root->left, max_sum);int r = Solution::dfs4MaxSum(root->right, max_sum);if ( l>0 ) ret += l;if ( r>0 ) ret += r;ret += root->val;max_sum = std::max(ret, max_sum);return std::max(root->val, std::max(root->val+l, root->val+r));} };

tips:

求array最大子序列和是一樣的思路。只不過binary tree不是一路,而是分左右兩路,自底向上算。

主要注意的地方如下:

1. 維護一個全局最優變量(max_sum),再用ret存放包括前節點在內的局部最大值;每次比較max_sum和ret時,max_sum代表的是不包含當前節點在內的全局最優,ret代表的是一定包含當前節點在內的全局最優。

2. dfs4MaxSum返回時需要注意,left和right只能算一路,不能一起都返到上一層。因為題目中要求的path抻直了只能是一條線,不能帶分叉的。

==============================================

第二次過這道題,大體思路有了,細節的錯誤也都犯了,改過來強化一次AC了。

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:int maxPathSum(TreeNode* root){int ret = INT_MIN;if (root) Solution::maxPS(root, ret);return ret;}static int maxPS( TreeNode* root, int& maxSum){if ( !root ) return 0;int l = Solution::maxPS(root->left, maxSum);int r = Solution::maxPS(root->right, maxSum);maxSum = max(maxSum, root->val+(l>0?l:0)+(r>0?r:0));return max(root->val,root->val+max(r,l));} };

?

轉載于:https://www.cnblogs.com/xbf9xbf/p/4511277.html

總結

以上是生活随笔為你收集整理的【Binary Tree Maximum Path Sum】cpp的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。