Java经典算法:最大的BST子树

给定一棵二叉树,找到最大的子树,即二叉搜索树(BST),其中最大表示其中的节点数最多的子树。
Java解决方案
class Wrapper{
int size;
int lower, upper;
boolean isBST;

public Wrapper(){
    lower = Integer.MAX_VALUE;
    upper = Integer.MIN_VALUE;
    isBST = false;
    size = 0;
}} public class Solution {
public int largestBSTSubtree(TreeNode root) {
    return helper(root).size;
}

public Wrapper helper(TreeNode node){
    Wrapper curr = new Wrapper();

    if(node == null){
        curr.isBST= true;
        return curr;
    }

    Wrapper l = helper(node.left);
    Wrapper r = helper(node.right);

    //current subtree's boundaries
    curr.lower = Math.min(node.val, l.lower);
    curr.upper = Math.max(node.val, r.upper);

    //check left and right subtrees are BST or not
    //check left's upper again current's value and right's lower against current's value
    if(l.isBST && r.isBST && l.upper<=node.val && r.lower>=node.val){
        curr.size = l.size+r.size+1;
        curr.isBST = true;
    }else{
        curr.size = Math.max(l.size, r.size);
        curr.isBST  = false;
    }

    return curr;
}}

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhaozihao594/article/details/105475534
今日推荐