剑指offer第33题二叉搜索树的后序遍历序列

剑指offer第33题二叉搜索树的后序遍历序列

**思路:**递归的形式解题

basecase : 如果左边界大于等于右边界了,return true,之上而下进行搜索,当搜索到二叉树的底部还没有结束时,说明他就是一个二叉搜 索树,必须要加,要不然会越界的

应用了二叉搜索树后续遍历的特性,最后一个值为根节点,比根节点小的树为左子树,比根节点大的为右子树,找到一个比根节点大的树的时候,记录当前索引的位置,这个索引的前面就都是左子树,循环判断后续节点的值,如果有一个数值比根节点小了,返回false,不是一颗二叉搜索树,或者不是二叉搜索树的后续遍历;

接着分治,左子树和右子树是不是满足条件,感觉写的多了,慢慢的感觉就有一点来了,你别说,思路很清晰

class Solution {
    public boolean verifyPostorder(int[] postorder) {
        return verify(postorder,0,postorder.length - 1);
    }
    public boolean verify(int[] postorder,int left,int right){
       if(left >= right){
           return true;
       }

       int k = left;
       int rootvalue = postorder[right];
        while(k < right && postorder[k] <  rootvalue){
            k++;
        }

        for (int i = k;i < right;i++){
            if (postorder[i] < rootvalue){
                return false;
            }
        }

        //检查左子树
        if(!verify(postorder,left,k - 1)){
            return false;
        }

        if(!verify(postorder,k,right - 1)){
            return false;
        }

        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值