博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] 333. Largest BST Subtree
阅读量:5977 次
发布时间:2019-06-20

本文共 2023 字,大约阅读时间需要 6 分钟。

Problem

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:

A subtree must include all of its descendants.

Example:Input: [10,5,15,1,8,null,7]   10    / \   5  15  / \   \ 1   8   7Output: 3Explanation: The Largest BST Subtree in this case is the highlighted one.             The return value is the subtree's size, which is 3.

Follow up:

Can you figure out ways to solve it with O(n) time complexity?

Solution

First try:

class Solution {    public int largestBSTSubtree(TreeNode root) {        if (root == null) return 0;        if (isBST(root)) return largestBSTSubtree(root.left)+largestBSTSubtree(root.right)+1;        return Math.max(largestBSTSubtree(root.left), largestBSTSubtree(root.right));    }    private boolean isBST(TreeNode root) {        if (root == null) return true;        if (root.left != null && findMax(root.left) >= root.val) return false;        if (root.right != null && findMin(root.right) <= root.val) return false;        if (isBST(root.left) && isBST(root.right)) return true;        return false;    }    private int findMax(TreeNode root) {        while (root.right != null) root = root.right;        return root.val;    }    private int findMin(TreeNode root) {        while (root.left != null) root = root.left;        return root.val;    }}

Optimized:

class Solution {    public int largestBSTSubtree(TreeNode root) {        if (root == null) return 0;        if (isBST(root, null, null)) return largestBSTSubtree(root.left)+largestBSTSubtree(root.right)+1;        return Math.max(largestBSTSubtree(root.left), largestBSTSubtree(root.right));    }    private boolean isBST(TreeNode root, Integer min, Integer max) {        if (root == null) return true;        if (min != null && min >= root.val) return false;        if (max != null && max <= root.val) return false;        if (isBST(root.left, min, root.val) && isBST(root.right, root.val, max)) return true;        return false;    }}

转载地址:http://xzpox.baihongyu.com/

你可能感兴趣的文章
mysql的慢查询
查看>>
phpcmsv9 幻灯片管理模块_UTF8
查看>>
Java的新项目学成在线笔记-day12(六)
查看>>
工作总结20190121
查看>>
趣谈NAT和防火墙的对话+防火墙静态PAT的应用
查看>>
RIP应用实验:
查看>>
洞悉物联网发展1000问之ZigbeePRO技术会卷土重来占领物联网吗
查看>>
Linux--DHCP
查看>>
C++
查看>>
OpenWrt编译
查看>>
Windows最经典应用大变脸:学生爽翻!
查看>>
关于如何防范Ⅱ、Ⅲ类银行结算账户风险
查看>>
写一个函数返回参数二进制中 1 的个数
查看>>
oracle网络公开课《存储技术》课件和视频共享下载
查看>>
oracle技术之检查点及SCN深入研究
查看>>
Android存储数据到本地文件
查看>>
MySQL数据库学习笔记(一)----MySQL 5.6.21的安装和配置(setup版)
查看>>
企业日志分析之linux系统message收集展示
查看>>
《统计学习方法》读书笔记(1)---学习的要素
查看>>
Linux下Nginx+PHP+MySQL配置(图)
查看>>