#二叉树#code02判断二叉树是不是搜索二叉树

1.首先了解什么是搜索二叉树

二叉树需要同时满足以下条件

(1)左子树上所有节点的值都小于根节点的值

(2)右子树上所有节点的值都大于根节点的值

(3)左右子树都是二叉搜索树。

2.这里我们采用递归套路来解决递归套路

(1)分析问题的各种可能性

(2)根据可能性去确定要去收集左右子树的哪些信息,写出信息体

(3)根据收集来左右子树的信息得到自己的这些信息

(4)返回信息体类型对象

3.解题步骤

(1)基于搜索二叉树的特点,我们知道如果一个二叉树是搜索二叉树,那么它的左子树和右子树必须同时为搜索二叉树,并且左子树结点的最大值必须小于头结点值,右子树结点的最小值大于头结点值

(2)通过分析,考虑到递归对二叉树以及其左右子树一视同仁,因此信息体内的信息为:是否为搜索二叉树,二叉树所有结点的最大值,二叉树所有结点的最小值

class Info{

    boolean isBST;

    int max;

    int min;

}

(其中isBST为是否是搜索二叉树,max为结点最大值,min为结点最小值)

(3)收集左右子树的信息体信息,返回值类型为信息体类型Info,需要考虑树为空的情况,此时我们不好确定是否为搜索二叉树,且最大最小值,那我们就返回空值return  null;(在上游处理空置)

收集完左右信息返回Info leftInfo, Info rightInfo

根据收集到的左右子树信息,写出自己的信息

最大最小值容易判断

int max = x.value;

if (leftInfo != null) {

max = Math.max(max, leftInfo.max);

}

if (rightInfo != null) {

max = Math.max(max, rightInfo.max);

}

int min = x.value;

if (leftInfo != null) {

min = Math.min(min, leftInfo.min);

}

if (rightInfo != null) {

min = Math.min(min, rightInfo.min);

}

如何判断是不是搜索二叉树呢(还要考虑空值)

首先我们假设是搜索二叉树,即boolean isBST=true;(和叶子结点有关,叶子结点需要设置为是搜索二叉树true,否则后续不好调整为true)

if (leftInfo != null && !leftInfo.isBST) {

isBST = false;

}

if (rightInfo != null && !rightInfo.isBST) {

isBST = false;

}

if (leftInfo != null && leftInfo.max >= x.value) {

isBST = false;

}

if (rightInfo != null && rightInfo.min <= x.value) {

isBST = false;

}

(4)返回信息体类型对象

return new Info(isBST, max, min);



还可以采用二叉树中序遍历的方法,后续有时间更

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容