三、分裂二叉樹的最大乘積(Weekly Contest 174)

題目描述:
給你一棵二叉樹,它的根爲 root 。請你刪除 1 條邊,使二叉樹分裂成兩棵子樹,且它們子樹和的乘積儘可能大。

由於答案可能會很大,請你將結果對 10^9 + 7 取模後再返回。

示例 1:

在這裏插入圖片描述
輸入:root = [1,2,3,4,5,6]
輸出:110
解釋:刪除紅色的邊,得到 2 棵子樹,和分別爲 11 和 10 。它們的乘積是 110 (1110)
示例 2:
在這裏插入圖片描述
輸入: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
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

class Solution {
   
	long result = 0;
	long mod = 1000000000 + 7;
	public int maxProduct(TreeNode root) {
		if (root == null)
			return 0;
		get(root);
		long sum = root.val;
		pre(root, sum);
		return (int) (result % (mod));
	}
	public void pre(TreeNode node,long sum) {
		if(node == null){
			return ;
		}
		result = Math.max(((sum - node.val) * node.val) , result);
		pre(node.left, sum);
		pre(node.right, sum);
	}
	public int get(TreeNode node) {
		if (node == null)
			return 0;
		int left = get(node.left);
		int right = get(node.right);
		node.val = (int) (left+ right+ node.val);
        
		return node.val;
	}
}

這道題我思路很快就寫出來了,其實很簡單,但是取模的時候有點粗心
把其實
(int)get % mod 和 (int)(get % mod)是不一樣的,以後記住了!!!
在這裏插入圖片描述
在這裏插入圖片描述

這兩種是不一樣的!!!,上面的直接轉化肯定會出錯,我一開始就卡在這裏卡了一個多小時哎,不說了都是淚,基礎不好啊

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