Bootstrap

判断是否是二叉树

利用二叉树的中序遍历的递增性判断

/**
 * BST树的节点类型
 * @param <T>
 */
class BSTNode <T extends Comparable<T>>{
    private T data; // 数据域
    private BSTNode<T> left; // 左孩子域
    private BSTNode<T> right; // 右孩子域

    public BSTNode(T data, BSTNode<T> left, BSTNode<T> right) {
        this.data = data;
        this.left = left;
        this.right = right;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public BSTNode<T> getLeft() {
        return left;
    }

    public void setLeft(BSTNode<T> left) {
        this.left = left;
    }

    public BSTNode<T> getRight() {
        return right;
    }

    public void setRight(BSTNode<T> right) {
        this.right = right;
    }
}

/**
 * BST树的实现
 * @param <T>
 */
class BST<T extends Comparable<T>>{
    private BSTNode<T> root; // 指向根节点

    /**
     * BST树的初始化
     */
    public BST() {
        this.root = null;
    }
/**
     * 判断是否是二叉树
     * @return
     */
    public boolean isBSTree(){
//         return  IsBSTree(root);
        T vsule = null;
        return IsBSTree(root,vsule);
    }

    private boolean IsBSTree(BSTNode<T> root, T vaule) {
        if (root==null){
            return true;
        }
        //不满足BST树 直接返回
        if (!IsBSTree(root.getLeft(),vaule))
        return false;

        if (vaule != null&&vaule.compareTo(root.getData())>0){
            return false;
        }
        vaule = root.getData();

        return IsBSTree(root.getRight(),vaule);

    }
}
;