剑指Offer:二叉搜索树的后序遍历序列【33】 剑指Offer:二叉搜索树的后序遍历序列【33】

剑指Offer:二叉搜索树的后序遍历序列【33】
剑指Offer:二叉搜索树的后序遍历序列【33】

题目描述

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

题目分析

剑指Offer:二叉搜索树的后序遍历序列【33】
剑指Offer:二叉搜索树的后序遍历序列【33】

Java题解

package tree;

import java.util.ArrayList;

public class VerifySquenceOfBST {


    public static boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length<=0)
                return false;
       ArrayList<Integer> al = new ArrayList<>();
       for(int s:sequence)
           al.add(s);
       return VerifySquenceOfBSTCore(al);
    }



    public static boolean VerifySquenceOfBSTCore(ArrayList<Integer> sequence) {
        if(sequence.size()<=0)
            return true;

        //取出序列最后一个元素
        int mid = sequence.get(sequence.size()-1);
        //System.out.println(mid);
        ArrayList<Integer> left = new ArrayList<>();
        ArrayList<Integer> right = new ArrayList<>();
        //扫描左子树
        int i = 0;
        for(;i<sequence.size()-1;i++)
        {
            if(sequence.get(i)>mid)
                break;
            left.add(sequence.get(i));
        }
        int j = i;
        //扫描右子树
        for(;j<sequence.size()-1;j++)
        {
            if(sequence.get(j)<mid)
                return false;
            right.add(sequence.get(j));
        }

        //判断左子树
        boolean le = true;
        le = VerifySquenceOfBSTCore(left);
        boolean ri = true;
        ri = VerifySquenceOfBSTCore(right);
     //判断左右子树是否均满足 return le&&ri; } public static void main(String[] args) { int[] arr ={5,7,6,9,11,10,8}; System.out.println(VerifySquenceOfBST(arr)); } }