255-Verify-Preorder-Sequence-in-Binary-Search-Tree
Last updated
Last updated
class Solution {
public boolean verifyPreorder(int[] preorder) {
if(preorder==null || preorder.length<1){
return true;
}
int root=Integer.MIN_VALUE;//根节点,初始化为最小值,因为左子树必然是小于根节点的,还未找到第一个需要判断的右节点
int esp=1;//栈帧,将原数组改造为一个栈
for(int i=1;i<preorder.length;i++){
if(preorder[i]<=root){
return false;
}
//入栈操作
if(preorder[i]<preorder[esp-1]){
preorder[esp]=preorder[i];
esp++;
}
else{
//维持单调递减栈,做出栈操作
while(preorder[i]>preorder[esp-1]){
esp--;
root=preorder[esp];
//栈为空
if(esp==0){
break;
}
}
//新节点入栈
preorder[esp]=preorder[i];
esp++;
}
}
return true;
}
}