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

题目

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

分析
碰到二叉树,优先想递归。
这里,后序数组,最后一个是根节点;从数组开始到第一个比root大的元素前面属于左子树;后面属于右子树;可以检查右子树是否都比root大。否,直接返回false;是,递归调用判断函数;
这里,终结条件是数组比较的开始位置大于或等于结束位置。假如跑到这一步,说明前面递归都没返回false。即,满足搜索二叉树,返回True。

代码实现

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence == null || sequence.length == 0){ //边界条件
            return false; 
        }
        if(sequence.length == 1){ //边界条件
            return true;
        }
        return judge(sequence, 0, sequence.length - 1); 
    }

    public boolean judge(int[] m, int start, int end){ //判断递归函数,三个参数
        if(start >= end){ // 终结条件
            return true;
        }
        int root = m[end];
        int i = start;
        for(; i < end; i++){ //找到左子树的结尾节点
            if(m[i] > root){
                break;
            }
        }
        for(int j = i; j < end; j++){ //判断右子树是否符合搜索二叉树,即右子树都比root大
            if(m[j] <= root){
                return false;  
            }
        }
        return judge(m,start,i-1) && judge(m,i,end-1); // 递归左右两棵子树
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值