方法1:中序遍历是升序的就是二叉搜索树,所以可以遍历一遍,然后判断即可,可以用队列存放遍历元素,用数组是不行的,因为大小不知道。。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
Queue<Integer> qu=new LinkedList();
public boolean isValidBST(TreeNode root) {
if(root==null){
return true;
}
inorder(root);
int i=qu.poll();
while(!qu.isEmpty()){
int j=qu.poll();
if(!(i<j)){
return false;
}
i=j;
}
return true;
}
public void inorder(TreeNode root){
if(root==null){
return ;
}
inorder(root.left);
qu.add(root.val);
inorder(root.right);
}
}
方法2:直接在中序遍历的过程中去判断,可以在非递归版本改,也可以在非递归版本改,在非递归版本改的时候方便一些。
中序遍历的非递归形式如下:
public static void inOrderUnRecur(Node head) {
System.out.print("in-order: ");
if (head != null) {
Stack<Node> stack = new Stack<Node>();
while (!stack.isEmpty() || head != null) {
if (head != null) {
stack.push(head);
head = head.left;
} else {
head = stack.pop();
System.out.print(head.value + " ");
head = head.right;
}
}
}
System.out.println();
}
验证二叉搜索树的方法如下:由于能力问题,,没改对,算了不想看答案,等回头做
在这里插入代码片