剑指offer-二叉搜索树的后序遍历序列

来源:互联网 发布:数据库unique 编辑:程序博客网 时间:2024/04/30 22:20

一、问题描述

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

二、思路

二叉树题目用递归做是没有悬念的,本题亦是如此。首先递归函数的退出条件是start>=end,返回真;其次第一个循环找到左右子树的分界点i - 1,i - 1前是左子树,i- 1后是右子树;第二个循环中如果左子树的值比根节点大,那么返回假,最后递归返回左右子树的查找结果,同时为真才表明是二叉搜索树的后续遍历,如果有其中一个为假,则不是后续遍历。

三、代码

class Solution {public:    bool verifyBST(vector<int> &array, int start ,int end){        if(start >= end) return true;        int i = end;        while(i > start && array[i - 1] > array[end])             --i;        for(int j = i - 1; j >= start; --j)             if(array[j] > array[end])             return false;        return verifyBST(array, start, i - 1) && (verifyBST(array, i, end - 1));    }    bool VerifySquenceOfBST(vector<int> sequence) {        if(!sequence.size()) return false;        return verifyBST(sequence, 0, sequence.size() - 1);    }};


0 0