您的位置:首页 > Web前端

《剑指offer》-判断某整数数组是不是某二叉搜索树后序遍历的结果

2018-02-01 15:26 246 查看
/*
* 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
* 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
* 思路:二叉排序树:左子树比根节点小,右子树比根节点大。
* 从后序遍历的结果来看,可以划分成前面一段(左子树)和中间一段(右子树)
* 确定左子树、右子树的起点和终点,分别对他们递归。
* 递归的终止条件是:起点、终点重合(到叶子节点)
*/
public class VerifySquenceOfBST {
public boolean verifySquenceOfBST(int [] sequence) {
if(sequence.length == 0)	return false;
return isResult(0, sequence.length - 1, sequence);
}

public boolean isResult(int start, int end, int [] seq) {
//System.out.println(start + " " + end);
if(end <= start)
return true;
int i = start;
for(;i < end;i ++) {
if(seq[i] > seq[end])	//找到右子树的起点
break;
}

for(int j = i;j < end;j ++) {
if(seq[i] < seq[end])
return false;
}

return isResult(start, i - 1, seq) && isResult(i, end - 1, seq);
}

public static void main(String[] args) {
int [] seq = {2,9,5,15,19,10,12};
System.out.println(new VerifySquenceOfBST().verifySquenceOfBST(seq));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐