题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
首先你要知道什么是二叉搜索树?
对于节点来说,根节点比左节点大,比右节点小,
后序序列代表着遍历顺序是左右根
这样就知道数组最后一个肯定是根节点,而可以用根节点把这个数组分割开,分成两部分,前部分都比根节点小,后部分都比根节点大,这样就满足二叉搜索树的后序遍历要求
而题也可以用这种规则来判定是否符合题意
//root是根节点,单独分出来了,这样好理解,前部分的下标,后半部分的下标,根节点
public boolean Ibst(int [] sequence,int left,int right,int root) {
if(left>right) {
return true;
}
int index=0;
for(int i=left;i<=right;i++) {
if(sequence[i]>root) {
index = i;//这被切割成两部分
for(int j=i+1;j<=right;j++) {
if(sequence[j]<root) { //如果后面部分有一个不满足的,就返回false
return false;
}
}
}
}
//这用的是&&,因为如果有一个部分不满足就不符合,
return Ibst(sequence, left, index-1, sequence[index])&&Ibst(sequence, index, right-1, sequence[right]);
}
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length<1) {
return false;
}
return Ibst(sequence, 0, sequence.length-2,sequence[sequence.length-1]);
}