Please enable Javascript to view the contents

剑指office(二十三)二叉树搜索树的后序遍历序列

 ·  ☕ 1 分钟  ·  🎅 YSL

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)

示例1

输入

[4,8,6,12,16,14,10]

返回值

true
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        
        if(sequence.empty())
            return false;
        int end = *(sequence.end()-1);
        bool result = true;
        
        vector<int> left;
        vector<int> right;
        
        vector<int>::iterator iter = sequence.begin();
        for(;iter!=sequence.end()-1;iter++)
            if(end<*iter)
                break;
    
        vector<int>::iterator splitP = iter;
        for(;iter!=sequence.end()-1;iter++)
            if(end>*iter)
                return false;

     
        vector<int>::iterator bei = sequence.begin();
        left.insert(left.end(),sequence.begin(),splitP);
        right.insert(right.end(),splitP,sequence.end()-1);
        bool leftFlag = (left.size()>1)?VerifySquenceOfBST(left):result;
        bool rightFlag = (right.size()>1)?VerifySquenceOfBST(right):result;
        return leftFlag&&rightFlag;
    }
};