微软100题-009

来源:互联网 发布:js字符串相等 编辑:程序博客网 时间:2024/06/04 19:45

第9题(树)
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ /
6 10
/ / / /
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false

#include<iostream>#include<vector>using namespace std;bool verifySquenceOfBST(int *a,int len){    if (NULL==a||len<=0)        return false;    int root = a[len-1];//确定根节点    int i = 0;    for (; i < len-1; ++i)//找到左子树的位置        if (root < a[i])            break;    int j = i;    for (; j < len - 1; ++j)//判断右子树        if (a[j] < root)            return false;    bool left = true, right = true;    if (i>0)        left = verifySquenceOfBST(a, i);//递归左字树    if (i < len - 1)        right = verifySquenceOfBST(a + i, len - i-1);//递归右子树    return (left&&right);}int main(){    int a[]{5, 7, 6, 9, 11, 10, 8}, len = (sizeof(a) / (sizeof(&a)));    cout << verifySquenceOfBST(a, len) << endl;    system("pause");    return 0;}
原创粉丝点击