2026/4/18 12:40:47
网站建设
项目流程
基层网站建设存在困难,个人网页设计说明书2000字,建设银行为啥重置不了密码,基于html5的wordpress题目链接#xff1a;1339. 分裂二叉树的最大乘积#xff08;中等#xff09; 算法原理#xff1a; 解法#xff1a;两次DFS 8ms击败80.19% 时间复杂度O(n) 第一次dfs#xff1a;计算整棵树的元素总和total 第二次dfs#xff1a;计算子树的元素总和t#xff0c;分割的另…题目链接1339. 分裂二叉树的最大乘积中等算法原理解法两次DFS8ms击败80.19%时间复杂度O(n)第一次dfs计算整棵树的元素总和total第二次dfs计算子树的元素总和t分割的另外一棵子树的元素和乘积可表示为 total-t在遍历子树的同时统计乘积 t*(total-t) 的最大值先用long类型存下最后返回的时候再取模转化为intJava代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val val; * this.left left; * this.right right; * } * } */ class Solution { private static final int MOD1_000_000_007; private long ret0; private int total; public int maxProduct(TreeNode root) { totaldfs1(root); dfs2(root); return (int)(ret%MOD); } private int dfs1(TreeNode node){ if(nodenull) return 0; return node.valdfs1(node.left)dfs1(node.right); } private int dfs2(TreeNode node){ if(nodenull) return 0; int tnode.valdfs2(node.left)dfs2(node.right); retMath.max(ret,(long)t*(total-t)); return t; } }