题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路
就是根据后序遍历找到根节点,小于根节点的就是左子树的范围,大于的就是右子树,根据这样来划分左右子树,然后进行递归遍历
思路是知道的,就是写代码的时候脑子混乱,写了很长时间才AC
public class Solution {
public boolean VerifySquenceOfBST(int[] sequence) {
if(sequence == null || sequence.length < 1){
return false;
}
return VerifySquenceOfBST(0,sequence.length-1,sequence);
}
public boolean VerifySquenceOfBST(int l,int r,int[] seq){
if(l < r) {
int root = seq[r];
int index = l;
while (index < r && seq[index] < root) {
index++;
}
for (int i = index; i < r; i++) {
if (root > seq[i]) {
return false;
}
}
//这里一定是r-1才行,否则会出现死循环
return VerifySquenceOfBST(l, index - 1, seq) && VerifySquenceOfBST(index, r-1, seq);
}
return true;
}
}
来源:CSDN
作者:fsdgfsf
链接:https://blog.csdn.net/fsdgfsf/article/details/103774020