bst java_Java经典算法:最大的BST子树

news/2024/12/22 2:55:33/

给定一棵二叉树,找到最大的子树,即二叉搜索树(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的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。


http://www.ppmy.cn/news/759181.html

相关文章

二叉检索树(BST)

使用无序表和有序表组织的数据&#xff0c;不是查找时间复杂度偏高&#xff0c;就是插入时间复杂度偏高&#xff0c;而接下来将要介绍的二叉检索树&#xff08;BST&#xff09;则能很好的解决以上问题。二叉检索树又称二叉查找树、二叉排序树。 BST性质 BST是满足下面所给出条…

玩转数据结构(十三)构建BST

1、二分搜索树简介 二分搜索树又称为二叉搜索树、排序二叉树等&#xff0c;是指一棵空树或者具有以下性质的二叉树&#xff1a; 若任意一个结点的左子树不为空&#xff0c;则左子树所有结点的值均小于它的根结点的值若任意一个结点的右子树不为空&#xff0c;则右子树所有结点…

ubuntu16.04修改PDT时间为当期时区

如下图&#xff0c;虚拟机ubuntu16.04 本来是PDT时间 运行命令 timedatectl set-timezone Asia/Shanghai 再查看&#xff0c;已经改成上海时区了

linux获取当前系统时间和修改时间

1、问题描述 最近项目一直报系统错误&#xff0c;提示{“errcode”:“AGW.1433”,“errmsg”:“请求签名错误或请求服务器时间戳误差大于 180 秒”} 2、操作描述 3、命令参考链接 清测可行

BST讲解

BST 第一步,什么是BST,所谓BST就是满足一种特定性质的二叉树,这个性质一般情况是当前节点的权值比他的左子树的所有点的权值大,比他的右子树的所有点的权值小,满足这样性质的二叉树就称为BST,下面给一个例子。如图,就是一棵BST,显而易见,我们可以看出他的中序遍历是用…

c#bst查找

using System; using 所以; using System.Collections.Generic; //想用list必须有他&#xff01;&#xff01;&#xff01; /*1&#xff0e; 设计BST 的左右链存储结构&#xff0c;并实现BST插入&#xff08;建立&#xff09;、删除、查找和排序算法。 2&#xff0e; 实现折半查…

BST插入(建立)、删除、查找和排序

实验要求&#xff1a; 设计BST 的左右链存储结构&#xff0c;并实现BST插入&#xff08;建立&#xff09;、删除、查找和排序算法。实现折半查找算法。实验比较&#xff1a;设计并产生实验测试数据&#xff0c;考察比较两种查找方法的时间性能&#xff0c;并与理论结果进行比较…

二分搜索树-BST,python实现

为什么要用二分搜索树二分搜索树的定义二叉搜索树的基本功能 初始化二分搜索树的节点插入元素查找元素深度优先遍历广度优先遍历删除操作 要删除的节点没有孩子节点要删除的节点有两个孩子节点要删除的节点有一个孩子节点 floor 和ceil操作 为什么要用二分搜索树&#xff1f;…