前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 1339. 分裂二叉树的最大乘积(DP)

LeetCode 1339. 分裂二叉树的最大乘积(DP)

作者头像
Michael阿明
发布2020-07-13 16:11:22
4990
发布2020-07-13 16:11:22
举报

1. 题目

给你一棵二叉树,它的根为 root 。请你删除 1 条边,使二叉树分裂成两棵子树,且它们子树和的乘积尽可能大。

由于答案可能会很大,请你将结果对 10^9 + 7 取模后再返回。

示例 1:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
输入:root = [1,2,3,4,5,6]
输出:110
解释:删除红色的边,得到 2 棵子树,和分别为 11 和 10 。它们的乘积是 110 (11*10)

示例 2:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
输入:root = [1,null,2,3,4,null,null,5,6]
输出:90
解释:移除红色的边,得到 2 棵子树,和分别是 15 和 6 。它们的乘积为 90 (15*6)

示例 3:
输入:root = [2,3,9,10,7,8,6,5,4,11,1]
输出:1025

示例 4:
输入:root = [1,1]
输出:1
 
提示:
每棵树最多有 50000 个节点,且至少有 2 个节点。
每个节点的值在 [1, 10000] 之间。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-product-of-splitted-binary-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. DP解题

代码语言:javascript
复制
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);//自底向上DP
    	int 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);
    }
};
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. DP解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档