leetcode 1373 二叉搜索子树的最大键值和

leetcode 1373 二叉搜索子树的最大键值和

题目描述:

本题主要考察二叉树的后续遍历,由于后序遍历可以拿到根节点左右子树的信息,我们可以通过对左右子树后续遍历,得到左右子树的四个有用的信息,1、是不是二叉搜索树 2、子树的最大值 3、子树的最小值 4、子树的和。

通过给dfs函数设置合适的返回值,得到子树的相关信息,使用数组存储子树的四个相关信息,可以写出如下代码:

class Solution {
public:
    int maxres=0;
    int maxSumBST(TreeNode* root) {
        getsumbst(root);
        return maxres;

    }
    vector<int> getsumbst(TreeNode* root){
        vector<int> res(4);
        if(root==nullptr){
            res[0]=1;
            res[1]=INT_MAX;
            res[2]=INT_MIN;
            res[3]=0;
            return res;
        }

        vector<int> left=getsumbst(root->left);
        vector<int> right=getsumbst(root->right);

        if(left[0]==1&&right[0]==1&&root->val>left[2]&&root->val<right[1]){
            res[0]=1;
            res[1]=min(left[1],root->val);
            res[2]=max(right[2],root->val);
            res[3]+=left[3]+right[3]+root->val;
            maxres=max(maxres,res[3]);
        }else{
            res[0]=0;
        }
        return res;
    }
};
posted @   lh123cha  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示
主题色彩