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;
}
};

浙公网安备 33010602011771号