涉及的知识点
二叉搜索树,后序遍历
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)
输入:
[4,8,6,12,16,14,10]
输出:
true
解题思路
BST特性:左孩子<根节点<右孩子,左右孩子都是BST.
因为每一颗BST的后序遍历的最后一个树总是根节点。所以只要判断左子树区间的所有节点<根节点值<右子树区间所有节点值。
代码
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length==0)
return false;
return isBST(sequence,0,sequence.length-1);
}
public boolean isBST(int[] sequence,int start,int end){
if(start>=end){
return true;
}
int key = sequence[end];
int i; //分界点
for(i=start;i<end;i++){
if(sequence[i]>key)
break; //找到分界点
}
for(int j=i;j<end;j++){ //后面的节点是否都大于end
if(sequence[j]<key)
return false;
}
return isBST(sequence,start,i-1)&&isBST(sequence,i,end-1);
}
}