判断二叉树是不是搜索二叉树
什么是搜索二叉树
搜索二叉树( Tree算法 二叉树 java,简称 BST)是一种二叉树,其中左子树中的所有节点的值都小于根节点的值,右子树中的所有节点的值都大于根节点的值。这种树的查找、插入和删除操作的时间复杂度都是 O(log n)。
解题思路
用递归的方式去做,在递归的过程中,我们可以判断左树是不是搜索二叉树,右树是不是搜索二叉树,然后合成一颗树时,判断整体是不是搜索二叉树。
1.构建每次递归要得到的信息,是不是平衡二叉树算法 二叉树 java 二叉树专题: 判断是不是搜索二叉树-java实现,和左树最大值,右树最小值,因为合成一颗树时算法 二叉树 java,要判断左树最大值小于根节点的值,右树最小值大于根节点的值
2.创建消息体,每次递归组装这些消息,然后就可以判断是不是搜索二叉树了
递归解题
先定义一个二叉树的结构
public class Node{
int val;
Node left;
Node right;
public Node(int val) {
this.val = val;
}
}
递归写法
<p><pre> /**
定义每次要拿到的信息体。
*/
public static class Info{
boolean isBST;
int max;
int min;
public Info(boolean isBST, int max, int min) {
this.isBST = isBST;
this.max = max;
this.min = min;
}
}
/**
- 递归调用
*/
public static Info process(Node head){
//base case 为null 时,因为无法给消息体最大最小值赋值,所以给个null 就可以
if (head == null){
return null;
}
Info left = process(head.left);
Info right = process(head.right);
int max = head.val;
int min = head.val;
if (left != null){
max = Math.max(max,left.max);
}
if (right != null){
min = Math.min(min,right.min);
}
boolean isBst = true;
//把不满足的条件都列出来
if (left != null && !left.isBST){
isBst = false;
}
if (right != null && !right.isBST){
isBst = true;
}
if (left != null && left.max > max){
isBst = false;
}
if (right != null && right.min