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

    技术2022-07-10  107

    题目描述

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

    解题思路

    对于一个后序序列S,如果去掉S的最后一个元素x得到序列S’,那么S’满足:S’可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是后序序列。

    代码实现

    class Solution { private: bool judge(vector<int> &sequence, int left, int right){ if(left >= right) return true; int i = right; while(i > left && sequence[i - 1] > sequence[right]) i--; for(int j = i - 1; j >= left; j--) if(sequence[j] > sequence[right]) return false; return (judge(sequence, left, i - 1) && judge(sequence, i, right - 1)); } public: bool VerifySquenceOfBST(vector<int> sequence) { if(sequence.size() == 0) return false; return judge(sequence, 0, sequence.size() - 1); } };

    运行结果

    运行时间:4ms 占用内存:376k

    Processed: 0.009, SQL: 9