判断整数序列是否为二元查找树后序遍历的结果

来源:互联网 发布:商务软件解决方案 编辑:程序博客网 时间:2024/06/03 21:24

输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。

分析:

根据后序遍历的特点可知,最后一个元素会把前面的元素分成两部分,前一部分小于它,后一部分大于或等于它。如果满足这个条件同时左右两部分也有这个性质,则该序列是二元查找树后序遍历的结果。整个过程是一个递归过程。

对于一个长度小于等于2的序列,一定是某一二元查找树后序遍历的结果,返回true。

#include <iostream>using namespace std;bool isPostOrderOfBST(int* array, int len) {    if(len <= 2) return true;    int i = 0;    while(array[i] < array[len-1] && i < len-1) i++;    int j = i;    while(array[j] >= array[len-1] && j < len-1) j++;    if(j != len -1) {        return false;    }    return isPostOrderOfBST(array, j) && isPostOrderOfBST(array+j, len-j-1);}int main() {    int array[7] = {5, 7, 6, 9, 11, 10, 8};    cout << isPostOrderOfBST(array, 7) << endl;    return 0;}


原创粉丝点击