LeetCode 1339. 分裂二叉树的最大乘积(DP)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1339. 分裂二叉树的最大乘积(DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給你一棵二叉樹,它的根為 root 。請你刪除 1 條邊,使二叉樹分裂成兩棵子樹,且它們子樹和的乘積盡可能大。
由于答案可能會很大,請你將結果對 10^9 + 7 取模后再返回。
示例 1:
示例 2:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-product-of-splitted-binary-tree
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. DP解題
class Solution { public:int maxProduct(TreeNode* root) {int sum = subsum(root);//求每個節點的包含自己在內及子節點和unsigned long long maxProduct = 1;dfs(root,sum,maxProduct);//遍歷樹,對每個節點求 val*(sum-val),取最大return int(maxProduct%1000000007);}int subsum(TreeNode* root){if(!root) return 0;int l = subsum(root->left);//自底向上DPint r = subsum(root->right);root->val += l+r;return root->val;}void dfs(TreeNode* root, int& sum, unsigned long long& maxProduct){if(!root || (!root->left && !root->right)) return;unsigned long long product;if(root->left){product = (unsigned long long)root->left->val * (sum-root->left->val);if(product > maxProduct)maxProduct = product;}if(root->right){product = (unsigned long long)root->right->val * (sum-root->right->val);if(product > maxProduct)maxProduct = product;}dfs(root->left,sum,maxProduct);dfs(root->right,sum,maxProduct);} }; 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的LeetCode 1339. 分裂二叉树的最大乘积(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 816. 模糊坐标
- 下一篇: 程序员面试金典 - 面试题 01.07.