题目描述
解题思路:根据二叉搜索树的后序遍历的特点,前小后大,因此判断是否符合这个条件即可。
解题代码:
class Solution {
//递归,根据后序遍历最后一位是根节点,前面的分为两部分,第一部分都比根节点小,第二部分都比根节点大,根据这个特性写出结果
public boolean verifyPostorder(int[] postorder) {
return dfs(postorder,0,postorder.length-1);
}
public boolean dfs(int[] sequence, int i, int j){
if(i >= j){//注意边界条件,有可能i>j,由于j等于上一层的右边界-1
return true;
}
int left = i;
while(sequence[left] < sequence[j]){
left++;
}
int right = left;
while(sequence[right] > sequence[j]){
right++;
}
return right == j && dfs(sequence,i,left-1) && dfs(sequence,left,j-1);
}
}