歐菲光:公司南昌所有園區生產經營情況正常,未出現員工感染新冠病毒情況
阿新 • • 發佈:2022-04-08
124. 二叉樹中的最大路徑和
路徑 被定義為一條從樹中任意節點出發,沿父節點-子節點連線,達到任意節點的序列。同一個節點在一條路徑序列中 至多出現一次 。該路徑 至少包含一個 節點,且不一定經過根節點。
路徑和 是路徑中各節點值的總和。
給你一個二叉樹的根節點 root
,返回其 最大路徑和 。
示例 1:
輸入:root = [1,2,3]
輸出:6
解釋:最優路徑是 2 -> 1 -> 3 ,路徑和為 2 + 1 + 3 = 6
示例 2:
輸入:root = [-10,9,20,null,null,15,7] 輸出:42 解釋:最優路徑是 15 -> 20 -> 7 ,路徑和為 15 + 20 + 7 = 42
提示:
- 樹中節點數目範圍是
[1, 3 * 104]
-1000 <= Node.val <= 1000
//深度優先搜尋,後序遍歷的時候順帶計算單邊最大路徑和即可
class Solution { public: int res=INT_MIN; int maxPathSum(TreeNode* root) { if(root==nullptr)return 0; traverse(root); return res; } //本題遍歷要去計算單邊最大路徑和 int traverse(TreeNode* root) { if(root==nullptr)return 0; //單邊最大路徑 如果是負數的話就不用選就是0 int leftMax=max(0,traverse(root->left)); int rightMax=max(0,traverse(root->right)); //後序遍歷 順帶計算單邊最大路徑和 int sum=root->val+leftMax+rightMax; res=max(res,sum); //從根節點root為起點的最大單邊路徑和 return root->val+max(leftMax,rightMax); } };