/** *二叉搜索树 *任何节点的左 子树不为null,则左子树上的所有的节点都比根节点小,右子树不为null,则右子树上的所有的节点都比根节点大 *判断二叉搜索树的方法是:将树按照中序遍历后,是不是逐渐递增的 * */ public class SearchTree { public static void main(String[] args) { Node root = new Node(4); root.left = new Node(2); root.right = new Node(5); root.left.left = new Node(1); root.left.right = new Node(3); root.right.right = new Node(6); System.out.println(isS(root)); } /** * 中序遍历, 左子树 -> 根节点 -> 右子树 * @param root */ public static boolean isS(Node root) { boolean res = true; int pre = Integer.MIN_VALUE; boolean flag = false; Stack<Node> stack = new Stack<Node>(); //从根节点开始,根节点的左节点,左节点的左节点依次入栈 stack.push(root); while(root.left != null) { stack.push(root.left); root= root.left; } while(!stack.isEmpty()) { Node temp = stack.pop(); if(temp != null) { //栈顶元素出栈,打印该元素, // System.out.print(temp.value + " "); if(!flag) { pre = temp.value; flag = true; } if(temp.value - pre < 0) { res = false; break; } pre = temp.value; //右子树不为空,右节点入栈 if(temp.right != null) { Node n1 = temp.right; //右节点入栈 stack.push(temp.right); //右节点的左节点,左节点的左节点入栈 while(n1.left != null) { stack.push(n1.left); n1 = n1.left; } } } } return res; } public static class Node { Node left; Node right; int value; public Node(int value) { this.value = value; } } }