二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解法是递归判断,先找根节点,划分左右子树递归求解。边界需要特殊考虑。
AC代码:
public class Solution { public boolean VerifySquenceOfBST(int[] sequence) { if(sequence == null || sequence.length <= 0) return false; int len = sequence.length; return solve(sequence, 0, len-1); } public boolean solve(int[] sequence, int start, int end) { if(start == end) return true; int root = sequence[end]; //System.out.println(root); int index = start; for(; index < end; index ++) { if(sequence[index] > root) break; } for(int j=index; j<end; j++) { if(sequence[j] < root) return false; } boolean left = true; if(index > start) left = solve(sequence, start, index-1); boolean right = true; if(index < end) right = solve(sequence, index, end-1); return (left && right) ; } }
作者:Pickle
声明:对于转载分享我是没有意见的,出于对博客园社区和作者的尊重一定要保留原文地址哈。
致读者:坚持写博客不容易,写高质量博客更难,我也在不断的学习和进步,希望和所有同路人一道用技术来改变生活。觉得有点用就点个赞哈。
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112835275-168981902.gif)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112841431-2047172832.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112847494-1544911856.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112904385-918783221.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111120143119-1302805212.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112856369-1466718103.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112830416-794416355.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111113919510-1155220901.gif)