题目:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出是的,否则输出号假设输入的数组的任意两个数字都互不相同。
思路:
后序遍历的结果最后一个元素是根元素,比根元素大的是右子树序列,小的是左子树序列.我们根据这个特性就可以通过递归解决这个问题.
代码
/**
* Created by Hammy on 2018/1/31.
*/
public class VerifySquenceOfBST
{
public boolean VerifySquenceOfBST(int[] sequence){
if(sequence == null || sequence.length == 0){
return false;
}
return VerifySquenceOfBST(sequence,0,sequence.length - 1);
}
/**
* 核心思路是递归
* 找到小于根节点的点然后递归
* 如果根节点左边的元素大于右边的元素直接返回false
* @param sequence
* @param left
* @param right
* @return
*/
private boolean VerifySquenceOfBST(int[] sequence,int left,int right){
//到达这部说明遍历的元素符合左子树小于右子树的规定
if(left >= right){
return true;
}
int temp = right - 1;
while(temp >= left && sequence[temp] > sequence[right]){
temp--;
}
//现在temp指向的是左子树序列的最后一个元素
for(int i = temp ; i >= left ;i--){
if(sequence[i] > sequence[right])
return false;
}
return VerifySquenceOfBST(sequence,left,temp)&&
VerifySquenceOfBST(sequence,temp+1,right-1);
}
}
网友评论