二分搜素树-验证二叉搜索树(运用迭代器,二叉搜索树的迭代器)(领扣)
思路:中序遍历一棵树,判断中序遍历的结果是否为有序递增序列, 或者运用迭代器;
中序遍历:递归实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isValidBST(TreeNode root) {
ArrayList<Integer> list=new ArrayList<>();
inOder(root,list);//中序遍历
for(int i=0;i<list.size()-1;i++){
if(list.get(i)>=list.get(i+1)){
return false;
}
}
return true;
}
public void inOder(TreeNode node,ArrayList<Integer> list){
if(node==null){
return;
}
inOder(node.left,list);
list.add(node.val);
inOder(node.right,list);
}
}
迭代器:迭代实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isValidBST(TreeNode root) {
BSTIterator it=new BSTIterator (root);
ArrayList<Integer> list=new ArrayList<>();
while(it.hasNext()){
list.add(it.next());
}
for(int i=1;i<list.size();i++){
if(list.get(i-1)>=list.get(i)){
return false;
}
}
return true;
}
class BSTIterator {
Stack<TreeNode> stack=new Stack<>();
public BSTIterator(TreeNode root){
TreeNode cur=root;
while(cur!=null){
stack.push(cur);
cur=cur.left;
}
}
public boolean hasNext() {
return !stack.isEmpty();
}
public int next() {
TreeNode next=stack.pop();
TreeNode cur=next.right;
while(cur!=null){
stack.push(cur);
cur=cur.left;
}
return next.val;
}
}
}