题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:
一个数组,如果是二叉搜索树的后序序列,那么根节点就是数组的最后一个
那么数组的前一部分,就是左子树(要么为空,要么全部小于根节点),后一部分全是右子树(要么为空,要么全部大于根节点)
只有一种情况是非法的,如4,2,3就不可能是,从4开始就表示只能全是右子树,但是2的出现破坏了这一规则
注意:
二叉树不能为空
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length ==0)
return false;
return SqueenceBST(sequence,0,sequence.length-1);
}
private boolean SqueenceBST(int[] sq,int startI,int endI){
if(endI -startI <2)
return true;
int jieduan =endI;
for(int i=startI;i<endI;i++){
if(sq[i] >sq[endI]){
jieduan=i;
break;
}
}
//if(jieduan ==startI-1)
for(int i=jieduan;i<endI;i++){
if(sq[i] <=sq[endI])
return false;
}
if(SqueenceBST(sq,startI,jieduan-1) == false)
return false;
if(SqueenceBST(sq,jieduan,endI-1) == false)
return false;
return true;
}
}