判断数组是否是二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
首先你要知道什么是二叉搜索树? 对于节点来说,根节点比左节点大,比右节点小, 后序序列代表着遍历顺序是左右根
这样就知道数组最后一个肯定是根节点,而可以用根节点把这个数组分割开,分成两部分,前部分都比根节点小,后部分都比根节点大,这样就满足二叉搜索树的后序遍历要求
而题也可以用这种规则来判定是否符合题意
//root是根节点,单独分出来了,这样好理解,前部分的下标,后半部分的下标,根节点 public boolean Ibst(int [] sequence,int left,int right,int root) { if(left>right) { return true; } int index=0; for(int i=left;i<=right;i++) { if(sequence[i]>root) { index = i;//这被切割成两部分 for(int j=i+1;j<=right;j++) { if(sequence[j]<root) { //如果后面部分有一个不满足的,就返回false return false; } } } } //这用的是&&,因为如果有一个部分不满足就不符合, return Ibst(sequence, left, index-1, sequence[index])&&Ibst(sequence, index, right-1, sequence[right]); } public boolean VerifySquenceOfBST(int [] sequence) { if(sequence==null||sequence.length<1) { return false; } return Ibst(sequence, 0, sequence.length-2,sequence[sequence.length-1]); }
上一篇:
Java基础知识总结(2021版)
下一篇:
Java如何让CPU利用率达到100%