首页 > 其他分享 >1339. 分裂二叉树的最大乘积

1339. 分裂二叉树的最大乘积

时间:2024-02-13 21:23:06浏览次数:24  
标签:1339 乘积 int sum cur bfs2 二叉树 root 总和


这道题关键突破点就是先算出节点总和,然后找到一颗子树总和最接近总和的一半。
乘积最大基本就是先要求总和,然后找到最接近总和一半。
关键就是这一步,找到最适合子树的和。

点击查看代码
    if(abs(2*cur-sum)<abs(2*best-sum)){
        best=cur;
    }
完整代码:
点击查看代码
class Solution {
public:
int sum=0;
int best=0;
void bfs1(TreeNode*root){
    if(!root){return ;}
    sum+=root->val;
    bfs1(root->left);
    bfs1(root->right);
}
int bfs2(TreeNode*root){
    if(!root){return 0;}
    int cur=root->val+bfs2(root->left)+bfs2(root->right);
    if(abs(2*cur-sum)<abs(2*best-sum)){
        best=cur;
    }
    return cur;
}
    int maxProduct(TreeNode* root) {
bfs1(root);
int k=bfs2(root);
return best*(sum-best);
    }
};

标签:1339,乘积,int,sum,cur,bfs2,二叉树,root,总和
From: https://www.cnblogs.com/yun-che/p/18014823

相关文章

  • 二叉树层次建树+遍历
    1.BiTree层次建树实现使用二叉树的链式存储,必须要构造一个辅助链式队列,用pcur遍历树结点,实现代码如下:代码实现//二叉树层次建树+画图2024-02-12#include<iostream>#include<cstdio>usingnamespacestd;//树结点的数据结构typedefcharElemType;typedefstructT......
  • 力扣 递归 迭代 栈 广度 队列 之 226. 翻转二叉树
    给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。 示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]栈/** *Definitionforabinarytreenode. *publicclassTreeNode......
  • 623 在二叉树中增加一行
    深度遍历,就是遍历:1.先要确定有几种情况,像这道题,深度为1,2就是最基本的情况,分为两种处理;2.根据不同情况,进行不同处理,不需要考虑后面递归的传递。3.确认传递的方式,如果函数返回的是指针,就需要left,right接住。完整代码:点击查看代码classSolution{public:TreeNode*ad......
  • 力扣递归 深度优先搜索 之 104. 二叉树的最大深度
    给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 示例1: 输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2/** *Definitionforabinarytreenode. *publicclassTre......
  • 力扣 145. 二叉树的后序遍历 递归 迭代
    递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval; *  TreeNodeleft; *  TreeNoderight; *  TreeNode(){} *  TreeNode(intval){this.val=val;} *  TreeNode(intval,TreeNodelef......
  • 力扣 144. 二叉树的前序遍历 递归 迭代
    递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval; *  TreeNodeleft; *  TreeNoderight; *  TreeNode(){} *  TreeNode(intval){this.val=val;} *  TreeNode(intval,TreeNodelef......
  • 力扣94. 二叉树的中序遍历 递归&迭代
    给定一个二叉树的根节点root,返回它的中序 遍历。 示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1] 递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval;......
  • 代码随想录算法训练营第十六天| 104.二叉树的最大深度 559.n叉树的最大深度 111.二
    104.二叉树的最大深度  题目链接:104.二叉树的最大深度-力扣(LeetCode)n叉树也一样思路:我的普通递归方法classSolution{public:intdepth(TreeNode*node,intd){intl=0,r=0;if(node->left==NULL&&node->right==NULL)returnd;if(node-......
  • (16/60)二叉树最大深度、最小深度、完全二叉树结点个数
    终于熬到了春节假~~有些手感了深度与高度深度是从根结点到叶结点的距离;高度是从叶结点到根结点的距离。深度从上往下(根为1);高度从下往上(叶为1)。二叉树最大深度leetcode:104.二叉树的最大深度后序递归法思路复杂度分析时间复杂度:O(N)。遍历了一遍。空间复杂度:和层数有关......
  • 005_二叉树
    1.用递归和非递归的方式实现二叉树的先序、中序、后序遍历先序遍历递归publicvoidpreOrderRecur(TreeNoderoot){if(root==null){return;}System.out.println(root.val+"");preOrderRecur(root.left);preOrderRecur(root.right);}......