输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。
假设输入的数组的任意两个数字都互不相同。
思路:
1、二叉搜索树:树的左节点小于根节点,右节点大于根节点
2、后序遍历:遍历的末节点是树的根节点
3、由末节点分开左子树和右子树两部分,再判断右子树是否全部大于根节点,是,则递归判断左子树和右子树两部分是否符合二叉搜索树
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(null == sequence || 0 == sequence.length){
return false;
}
return verifySequenceOfBST(sequence,0,sequence.length-1);
}
public boolean verifySequenceOfBST(int []sequence ,int start,int end){
if( start >= end){
return true; //当start大于等于end时,说明只剩下一个节点,符合条件
}
int index = 0;
while(index<end-1 && sequence[index] < sequence[end]){ //找第一个比后序遍历末节点大的元素下标
index++;
}
int right = index;
while(right<end-1 && sequence[right]>sequence[end]){
right++;
}
if(right != end-1){ //若right不等于end-1,则说明右边的部分不是全部大于sequence[end];
return false;
}
right = index;
return verifySequenceOfBST(sequence,start,index-1) && verifySequenceOfBST(sequence,index,end-1);
}
}