剑指offer——二叉搜索树的后序遍历序列

来源:互联网 发布:vb窗体滚动条 编辑:程序博客网 时间:2024/06/03 15:47

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

 * 递归实现检测
     *
     * 对于后序遍历来说,序列数组的最后一个元素一定是根节点,
     * 则根据这个元素,将前面的数组分为左、右两个部分,左侧部分都小,右侧部分都大,
     * 如果右侧部分有比该根节点小的元素,那么就不是后序遍历,如此递归进行
     * @param arr
     * @param start
     * @param end
     * @return
     */
public class Solution {    public boolean VerifySquenceOfBST(int [] sequence) {         if(sequence.length==0)return false;     return Verify1(sequence,0,sequence.length-1);    }         public boolean Verify1(int []sequence,int start,int end){         //不加会导致数组越界         if(start>=end)return true;          int root = sequence[end];// 找到比root大和比root小的分界点,分成左侧、右侧两组数据 int index; for(index=start;index<end&&sequence[index]<root;index++); // 只需要看右侧即可,因为前面的for循环,已经确保左侧部分全部都小于root for(int i = index;i<end;i++){ if(sequence[i]<root)return false; }  return Verify1(sequence, start, index-1)&&Verify1(sequence, index, end-1); }}




0 0