风也温柔

计算机科学知识库

算法 二叉树 java 二叉树专题: 判断是不是搜索二叉树-java实现

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

  什么是搜索二叉树

  搜索二叉树( 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