Loading

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 @ 2022-03-07 10:51  lh123cha  阅读(47)  评论(0)    收藏  举报