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

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。

如果是则返回true,否则返回false。

假设输入的数组的任意两个数字都互不相同。

数据范围:

数组长度 [0,1000]。

样例:

输入: [4, 8, 6, 12, 16, 14, 10]
输出: true

代码:

class Solution {
    public boolean verifySequenceOfBST(int [] sequence) {
        //深度优先搜索
        return dfs(sequence,0,sequence.length-1);
    }
    //递归方法,用于验证从索引 l 到 r 的子数组是否满足二叉搜索树的后序遍历条件
    public boolean dfs(int[] sequence,int l,int r){
        //如果左边界大于等于右边界,说明当前子树为空或只有一个节点,直接返回true
        if(l>=r)return true;
        //后序遍历的最后一个元素是当前子树的根节点
        int root = r;
        //初始化指针k,用于找到左右子树的分界点
        int k = l;
        //找到第一个大于根节点的元素,分界点左边是左子树,右边是右子树
        while(k<r&&sequence[k]<sequence[root])k++;
        //检查右子树中的所有元素是否都大于根节点
        for(int i = k;i<r;i++){
            //如果存在小于根节点的元素,则不满足条件
            if(sequence[i]<sequence[root])return false;
        }
        //递归验证左子树和右子树是否也满足条件
        return dfs(sequence,l,k-1)&&dfs(sequence,k,r-1);
    }
}
posted @ 2025-05-27 09:02  回忆、少年  阅读(21)  评论(0)    收藏  举报