面试题33:二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列。这个题目应该注意二叉搜索树的后序遍历的特征:最后一个值是根节点。

C++版本

#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
#include <string>
#include <queue>
#include <algorithm>
#include "TreeNode.h"
using namespace std;

// 之字形打印二叉树
bool VerifySquenceOfBST(vector<int> sequence) {
    int length = sequence.size();
    if(length < 1)
        return false;
    // 根节点
    int root = sequence[length-1];
    int i = 0;
    // 左子树上的所有节点应该都比root小
    for(i = 0; i < length - 1; i++){
        if(sequence[i] > root)
            break;
    }
    int j = i;
    // 右子树上的所有节点应该都比root大
    for(; j < length - 1; j++){
        if(sequence[j] < root)
            return false;
    }
    bool left = true;
    // 前i个数
    if(i > 0){
        vector<int> leftSequence(sequence.begin(), sequence.begin() + i);
        left = VerifySquenceOfBST(leftSequence);
    }
    bool right = true;
    // i到倒数第二个数
    if(i < length - 1){
        vector<int> rightSequence(sequence.begin() + i, sequence.end() - 1);
        right = VerifySquenceOfBST(rightSequence);
    }
    return left && right;
}

int main()
{

    return 0;
}
posted @ 2020-07-28 20:10  程序员曾奈斯  阅读(113)  评论(0编辑  收藏  举报