首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >天池 在线编程 最大子树(自底向上)

天池 在线编程 最大子树(自底向上)

作者头像
Michael阿明
发布2021-09-06 11:09:12
发布2021-09-06 11:09:12
2340
举报

1. 题目

描述

给你一棵二叉树,找二叉树中的一棵子树,他的所有节点之和最大。 返回这棵子树的根节点。 我会把你返回的节点作为最优子树的树根来打印。 数据保证有且仅有唯一的解。

代码语言:javascript
复制
示例
样例 1:
输入:
{1,-5,2,0,3,-4,-5}
输出:3
说明
这棵树如下所示:
     1
   /   \
 -5     2
 / \   /  \
0   3 -4  -5
以3为根的子树(只有3一个节点)的和是最大的,所以返回3。

样例 2:
输入:
{1}
输出:1
说明:
这棵树如下所示:
   1
这棵树只有整体这一个子树,所以返回1.

2. 解题

代码语言:javascript
复制
/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
    int ans = INT_MIN;
    TreeNode *res = NULL;
public:
    /**
     * @param root: the root of binary tree
     * @return: the maximum weight node
     */
    TreeNode * findSubtree(TreeNode * root) {
        // write your code here
        find(root);
        return res;
    }
    int find(TreeNode* root)
    {
        if(!root) return INT_MIN;
        int l = find(root->left); // 左子树的总和
        l = (l==INT_MIN ? 0 : l);
        int r = find(root->right);// 右子树的总和
        r = (r==INT_MIN ? 0 : r);
        int s = l+r+root->val; //当前子树的总和
        if(s > ans)// 记录最大的
        {
            ans = s;
            res = root;
        }
        return s;
    }
};

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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