赞
踩
class Node{ Integer data; Node left; Node right; public Node(int data) { this.data = data; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Node node = (Node) o; return Objects.equals(data, node.data); } @Override public int hashCode() { return Objects.hash(data); } }
/** * 判断一颗二叉树是否是二叉搜索树 * 解:二叉搜索树的特点 (左节点 < 头节点 < 右节点) 并且二叉搜索树的中序遍历是升序的 * @param root */ // preData:记录当前节点的上一个节点的值 private static int preData = Integer.MIN_VALUE; private static boolean isBST(Node root) { // 节点为空,返回true if(root == null){ return true; } // 左子树返回的结果 boolean isLeft = isBST(root.left); // 如果左子树中存在不满足二叉搜索树特点的,返回false if(!isLeft){ return false; } // 上一个节点的值 >= 当前节点的值,表示不是升序,则直接返回false,表示不是二叉搜素树 if(preData >= root.data){ return false; }else{ // 否则将当前节点的值保存起来,继续遍历右子树,判断是否符合二叉搜索树的特点 preData = root.data; } return isBST(root.right); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。