面试题30

二叉搜索树的后序遍历序列:判断数组是不是某二叉搜索树的后序遍历结果

#include<stdio.h>


int isTreeOrder(int *A, int len) {
    if (A == NULL || len <= 0)
        return 0;

    int root = A[len - 1];
    int i;    
    for (i = 0; i < len; i++) {   //左子树都小于根结点
        if (A[i] >= root)
            break;
    }

    int j ;                    
    for (j=i; j < len; j++) {    //右子树都大于根结点
        if (A[j] < root)
            return 0;
    }

    int left = 1;
    if (i > 0) {
        left = isTreeOrder(A, i);
    }

    int right = 1;
    if (i<len-1 ) {
        right = isTreeOrder(A+i,len-i-1);
    }

    return left&&right;
}


int main() {
    int A[] = {7,4,5,6};

    int len = sizeof(A) / sizeof(A[0]);
    int istrue=isTreeOrder(A, len);

}
点赞