二叉搜索树的后序遍历序列

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。例如输入{5,7,6,9,11,10,8}则输出true。

思路:二叉搜索树的特点是左子树的所有节点比根节点小,右子树的所有节点比根节点大,后续遍历最后一个节点是根节点,以题目中的输入为例,8为根节点,5、7、6均比8小,为左子树,9、11、10均比8大,为右子树。然后再分别对左右子树进行这种规律的判断,一旦发现不符合,则返回false,否则返回true。可以采用递归的方法。

    public static boolean verify(List<Integer> list){
        if(list.size()==0)
            return true;
        List<Integer> left=new ArrayList<Integer>();
        List<Integer> right=new ArrayList<Integer>();     
        while(list.get(0)<list.get(list.size()-1)){
            left.add(list.get(0));
            list.remove(0);
        }

        while(list.get(0)>list.get(list.size()-1)){
            right.add(list.get(0));
            list.remove(0);
        }

        if(list.size()>1)
            return false;
        else
            return verify(left)&&verify(right);

    }
posted @ 2016-05-02 19:52  黄大仙爱编程  阅读(96)  评论(0编辑  收藏  举报