import java.util.*;

public class Solution {
    public boolean isValidBST (TreeNode root) {
        Stack<TreeNode> stack = new Stack<>();
        stack.add(root);
        int curVal = Integer.MIN_VALUE;
        while(!stack.isEmpty()){
            TreeNode pop = stack.pop();
            if(pop!=null){
                stack.add(pop);
                stack.add(pop.left);
            }else if(!stack.isEmpty()){
                TreeNode pop1 = stack.pop();
                if(curVal<pop1.val){
                    curVal = pop1.val;
                }else{
                    return false;
                }
                stack.add(pop1.right);
            }
        }
        return true;
    }
}