import java.util.LinkedList;
import java.util.Stack;
/**
* 验证一个二叉树是否是二叉搜索树
*/
public class ValidateBinarySearchTree {
/**
* 根据中序遍历的结果来判断是否是二叉搜索树
* @param list
* @return
*/
public static boolean isValidate(LinkedList<Integer> list){
for(int i = 1; i < list.size(); i ++){
if(list.get(i - 1) >= list.get(i)){
return false;
}
}
return true;
}
/**
* 使用中序遍历来确定二叉树是否是二叉搜索树,因为中序遍历就是有顺序的
* @param tree
*/
public static LinkedList<Integer> validateBinarySearchTree(BinaryTree tree, LinkedList<Integer> list){
if(tree == null){
return list;
}
validateBinarySearchTree(tree.left, list);
list.add(tree.value);
validateBinarySearchTree(tree.right, list);
return list;
}
/**
* 使用中序遍历来确定二叉树是否是二叉搜索树,因为中序遍历就是有顺序的
* @param tree
*/
public static LinkedList<Integer> validateBinarySearchTree(BinaryTree tree){
LinkedList<Integer> list = new LinkedList<>();
if(tree == null){
return list;
}
BinaryTree node = tree;
Stack<BinaryTree> stack = new Stack<>();
while(!stack.isEmpty() || node != null){
if(node != null){
stack.push(node);
node = node.left;
}
if(node == null && !stack.isEmpty()){
node = stack.pop();
list.add(node.value);
node = node.right;
}
}
return list;
}
public static void main(String[] args){
BinaryTree head = new BinaryTree(4);
BinaryTree left = new BinaryTree(2);
BinaryTree right = new BinaryTree(5);
BinaryTree left01 = new BinaryTree(1);
BinaryTree right01 = new BinaryTree(3);
head.left = left;
head.right = right;
left.left = left01;
left.right = right01;
LinkedList<Integer> list = new LinkedList<>();
System.out.println(isValidate(validateBinarySearchTree(head, list)));
System.out.println("-----------");
System.out.println(isValidate(validateBinarySearchTree(head)));
}
}
//二叉树的类
class BinaryTree{
int value;
BinaryTree left;
BinaryTree right;
public BinaryTree(int value){
left = null;
right = null;
this.value = value;
}
}