- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址:https://leetcode-cn.com/problems/largest-bst-subtree/
Given a binary tree, find the largest subtree which is a Binary Search Tree (BST)
, where largest means subtree with largest number of nodes in it.
Note:
Example:
Input: [10,5,15,1,8,null,7]
10
/ \
5 15
/ \ \
1 8 7
Output: 3
Explanation: The Largest BST Subtree in this case is the highlighted one.
The return value is the subtree's size, which is 3.
Follow up:
找出一个树中最大的BST有多少个节点。
如果用简单的方法做,就是先判断每个树是不是BST,如果是则返回其节点个数,如果不是就递归他的左右子树,最后结果要用最大值。
C++代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int largestBSTSubtree(TreeNode* root) {
if (!root) return 0;
int res = 0;
if (isBST(root, INT_MIN, INT_MAX)) {
return countNodes(root);
}
res = max(res, largestBSTSubtree(root->left));
res = max(res, largestBSTSubtree(root->right));
return res;
}
bool isBST(TreeNode* root, int minVal, int maxVal) {
if (!root) return true;
if (root->val >= maxVal)
return false;
if (root->val <= minVal)
return false;
return isBST(root->left, minVal, root->val) && isBST(root->right, root->val, maxVal);
}
int countNodes(TreeNode* root) {
if (!root) return 0;
return 1 + countNodes(root->left) + countNodes(root->right);
}
private:
int res = 0;
};
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
2022
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
假设我有一个看起来像这样的数据框 A 0 17 1 21 2 18 3 11 4 4 5 27 6 21 7 11 8 7 9 4 10 7
当一周的“最大的一天”不存在时如何获取数据? 例如,如果我的数据库中不存在特定一周的星期五(假设星期六和星期日不在我的数据库中),我仍然希望能够获取星期四的数据。如果星期五和星期四都不存在,我想获取星
#include int main (void) { int phy,geo,i,highest,largest; int arr[2]={phy,geo}; printf(
这个问题是在一次采访中被问到的,我仍在寻找最佳解决方案。 给你一个有 N 个单元格的迷宫。每个单元格可以有多个入口点,但导出点不能超过一个(即入口/导出点是单向门,如阀门)。 单元格以从 0 开始的整
给定一个大的稀疏矩阵(比如 10k+ x 1M+),我需要找到一个子集,它不一定是连续的,由构成密集矩阵(所有非零元素)的行和列组成。我希望这个子矩阵在某些纵横比约束下尽可能大(不是最大和,而是最
题目地址:https://leetcode-cn.com/problems/check-if-a-number-is-majority-element-in-a-sorted-array/ 题目描述
题目地址:https://leetcode-cn.com/problems/count-largest-group/ 题目描述 Given an integer n. Each number fr
题目地址:https://leetcode.com/problems/largest-sum-of-averages/description/ 题目描述: Wepartition a row of
题目地址:https://leetcode.com/problems/largest-triangle-area/description/ 题目描述 Youhave a list of point
我使用 fastgreedy.community 生成一个社区对象,其中包含 15 个社区。但是我怎样才能在这 15 个社区中提取最大的社区呢? Community sizes 1 2 3
问。给定两个长度相等的数组 A 和 B,找到索引 [i,j] 的最大可能连续子数组,使得 max(A[i: j]) B[j]: Bq.pop() Bq.app
问。给定两个长度相等的数组 A 和 B,找到索引 [i,j] 的最大可能连续子数组,使得 max(A[i: j]) B[j]: Bq.pop() Bq.app
我想使用以下规则从文件夹中检索文件: 获取最大的文件 如果文件大小相同,则采用最新的文件。 到目前为止我已经尝试过以下方法: List folderFilePaths = new ArrayList(
我想知道我的思路是否正确。 我正在准备面试(作为一名大学生),我遇到的其中一个问题是找到数组中 K 个最大的数字。 我的第一个想法是只使用部分选择排序(例如,从第一个元素开始扫描数组,并为看到的最低元
我需要使用动态规划在零和一的矩阵中找到最大的三角形。所以如果这是我的矩阵: 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 1 然后有两个最大
给定一个元素数组,找到最大可能的数字通过使用数组的元素形成。 例如:10 9 答:910 2 3 5 78 答:78532 100 9 答:9100 我知道这个问题有一个使用自定义字符串比较器的解决方
我正在调试内存不足的异常。当我得到异常时,“虚拟字节”性能计数器指示有足够的可寻址空间。然而,问题在于可寻址空间碎片化严重,并且“最大空闲区域”(从 WinDbg 中的 !address 返回)太
题目地址:https://leetcode.com/problems/kth-largest-element-in-an-array/description/ 题目描述 Find the kth
题目地址:https://leetcode.com/problems/largest-time-for-given-digits/description/ 题目描述 Given an array
如何从java中的链表中删除最大元素?我知道我可以使用 get() 或 remove() 函数来检索/删除元素。但我想让它变得高效。我想使用迭代器。你知道我该怎么做吗?请注意,我不想创建自己的链表。我
我是一名优秀的程序员,十分优秀!