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

/**
 *二叉搜索树
 *任何节点的左 子树不为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;
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/moris5013/p/11670268.html