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

什么是搜索二叉树

        用来搜索的二叉树就叫搜索二叉树,用来对数据进行二分查找,特点就是

                1 所有左叶子节点的数都比当前节点小

                2 所有右边节点的数都比当前节点大

思路:判断当前节点的左右子树是不是二叉树,如果是,说明当前节点有可能是,判断当前节点是不是二叉树

可能情况:

        1 当前节点也是二叉查找树,条件就是左右子树是二叉查找树,并且当前节点的值大与左子树最大值,小于右子树最小值

        2 当前节点不是二叉查找树,条件  左右子树有一个不是二叉查找树树的当前节点就不是,并且当前节点的值大与左子树最大值,小于右子树最小值 这个条件不成立

Node节点内容:

        1 当前节点之下是否是二叉查找树树 boolen

        2  当前节点下所有节点最大值

        3 当前节点下所有节点最小值

  代码

package 算法.二叉树;

import 算法.二叉树遍历;

//判断二叉树是否是搜索二叉树
public class test1 {

    /**
     * 树节点
     */
    public static class Node {
        //1 当前节点之下是否是二叉查找树树 boolen
       public boolean  flag;
        //2 当前节点下所有节点最大值
        public int max;
        //3 当前节点下所有节点最小值
        public int min;


        public int num;
        public Node left;
        public Node right;

        public Node(boolean flag, int max, int min) {
            this.flag = flag;
            this.max = max;
            this.min = min;
        }
    }

    public static Node process(Node node) {
        //当前节点为空返回
        if (node == null) {
            return  new Node(true,0,0);
        }
        Node l = process(node.left);
        Node r = process(node.right);

        //拿到左右节点之后 判断相应情况

        //1 如果满足二叉查找树 条件就是左右子树是二叉查找树,并且当前节点的值大与左子树最大值,小于右子树最小值
        node.flag = false;
        if (l.flag && r.flag && node.num > l.max&& node.num< r.min) {
            node.flag = true;
        } 
        // 2 更改max 和min的数据
        node.max = Math.max(l.max, r.max);
        node.min = Math.max(l.min, r.min);
        
        return node;

    }


    public static void main(String[] args) {
        process(null);
    }
}

        

猜你喜欢

转载自blog.csdn.net/u010191034/article/details/121339353