二叉搜索树的后序遍历序列

来源:互联网 发布:澳大利亚土木工程知乎 编辑:程序博客网 时间:2024/05/16 17:32

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
#include <iostream>using namespace std;bool VerifySquenceOfBST(int sequence[], int length){if(sequence == NULL && length <= 0)return false;int root = sequence[length -1];int i;for(i= 0; i < length-1; i++){if(sequence[i] > root)break;}int j;for(j = i; j < length -1; j++ ){if(sequence[j] < root )return false;}bool left = true;if(i > 0) left = VerifySquenceOfBST(sequence, i);bool right = true; //预定义为true,在最后如果为叶子节点的情况就出错了if(length - 1 - i > 0) right = VerifySquenceOfBST(sequence, length - 1 - i);return (right & left);}

// ====================测试代码====================void Test(char* testName, int sequence[], int length, bool expected){    if(testName != NULL)        printf("%s begins: ", testName);    if(VerifySquenceOfBST(sequence, length) == expected)        printf("passed.\n");    else        printf("failed.\n");}//            10//         /      \//        6        14//       /\        /\//      4  8     12  16void Test1(){    int data[] = {4, 8, 6, 12, 16, 14, 10};    Test("Test1", data, sizeof(data)/sizeof(int), true);}//           5//          / \//         4   7//            ///           6void Test2(){    int data[] = {4, 6, 7, 5};    Test("Test2", data, sizeof(data)/sizeof(int), true);}//               5//              ///             4//            ///           3//          ///         2//        ///       1void Test3(){    int data[] = {1, 2, 3, 4, 5};    Test("Test3", data, sizeof(data)/sizeof(int), true);}// 1//  \//   2//    \//     3//      \//       4//        \//         5void Test4(){    int data[] = {5, 4, 3, 2, 1};    Test("Test4", data, sizeof(data)/sizeof(int), true);}// 树中只有1个结点void Test5(){    int data[] = {5};    Test("Test5", data, sizeof(data)/sizeof(int), true);}void Test6(){    int data[] = {7, 4, 6, 5};    Test("Test6", data, sizeof(data)/sizeof(int), false);}void Test7(){    int data[] = {4, 6, 12, 8, 16, 14, 10};    Test("Test7", data, sizeof(data)/sizeof(int), false);}void Test8(){    Test("Test8", NULL, 0, false);}int main(int argc, char* argv[]){    Test1();    Test2();    Test3();    Test4();    Test5();    Test6();    Test7();    Test8();    return 0;}

0 0
原创粉丝点击