牛客OJ:判断序列是否为一棵树的后序遍历

本文介绍了一种验证序列是否为有效二叉搜索树后序遍历的方法。通过检查序列中最后一个元素能否将序列划分为两部分,使得左边部分所有节点小于该元素,右边部分所有节点大于该元素,以此递归判断序列的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有个规律,前序遍历,中序遍历,后序遍历都是沿着树边逆时针转一圈。

后序遍历只需要判断最后一个元素是否可以划分前面序列为两部分:

代码:

class Solution {
public:
    // 最后一个数字是否能划分数据;
    bool solve(vector<int> s,int l,int r){
        if(l >= r-1) return true;
        int key = s[r-1];
        bool ans = true;
        int flag = -1;
        for(int i = l;i<r-1;i++){
            if(flag == -1&&s[i] > key){
                flag = i;
            }
            if(flag != -1&&s[i] < key){
                ans = false;
            }
        }
        if(flag == -1) return solve(s,l,r-1);
        else if(ans) return solve(s,l,flag-1) && solve(s,flag,r-1);
        else return ans;
    }
    bool VerifySquenceOfBST(vector<int> sequence) {
        int L = sequence.size();
        if(L<=0) return false;
        return solve(sequence,0,L);
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值