333-Largest-BST-Subtree

原题链接arrow-up-right

0x0 题目详情

给定一个二叉树,找到其中最大的二叉搜索树(BST)子树,其中最大指的是子树节点数最多的。

注意: 子树必须包含其所有后代。

测试用例:

输入: [10,5,15,1,8,null,7]

     10 
     / \ 
    5  15 
   / \   \ 
  1   8   7

输出: 3 解释: 高亮部分为最大的 BST 子树。 返回值 3 在这个样例中为子树大小。 进阶: 你能想出用 O(n) 的时间复杂度解决这个问题吗?

0x1 解题思路

这道题很明显是要采用从down-to-up的方法求解。因为一颗BST要求左子树是BST并且左子树是BST并且当前节点也符合BST的规则。

所以思路就很简单:

  • 首先查看左右子树是否为BST,如果不是直接返回

  • 查看当前节点是否符合BST的规则,即是否大于左子树的最大值,小于右子树的最小值,如若不是则返回

  • 收集当前最大BST的节点树并返回当前树的最大值与最小值

0x2 实现代码

0x3 课后总结

查看树是不是BST一看就是down-to-up的解法辣。

左子树是BST、右子树是BST、当前树也是BST,这棵树才叫BST。

Last updated

Was this helpful?