您的位置:首页 > 其它

输入一个整数数组,判断该数组是不是某个二叉搜索树的前序遍历结果

2015-07-07 16:03 513 查看
输入一个整数数组,判断该数组是不是某个二叉搜索树的前序遍历结果。如果是则返回true,否则返回false。假设输入数组的任意两个数字都互不相同。

/*

* PreOrder.cpp

*

* Created on: 2015年7月7日

* Author: hxg

*/

#include<stdio.h>

// BST:Binary Search Tree,二叉搜索树

bool VerifySequenceOfBST(int sequence[], int length)

{

if(sequence == NULL || length <=0)

return false;

int root = sequence[0];

//在二叉搜索树中左子树的结点小于根结点

int i =1;

for(;i < length; ++i)

{

if(sequence[i] > root)

break;

}

//在二叉搜索树中右子树的结点大于根结点

int j = i;

for(; j < length; ++j)

{

if(sequence[j] < root)

return false;

}

//判断左子树是不是二叉搜索树

bool left = true;

if(i > 1)

left = VerifySequenceOfBST(sequence + 1,i - 1);

//判断右子树是不是二叉搜索树

bool right = true;

if(i < length)

right = VerifySequenceOfBST(sequence + i,length - i);

return (left && right);

}

void Test(char * testName, int sequence[], int length, bool expected)

{

if(testName != NULL)

printf("%s begins: ", testName);

if(VerifySequenceOfBST(sequence,length) == expected)

printf("passed.\n");

else

printf("failed.\n");

}

// 10

// / \

// 6 14

// /\ /\

// 4 8 12 16

void Test1()

{

int data[] = {10, 6, 4,8,14,12,16};

Test("Test1",data,sizeof(data)/sizeof(int),true);

}

// 5

// / \

// 4 7

// /

// 6

void Test2()

{

int data[] = {5,4,7,6};

Test("Test2", data, sizeof(data)/sizeof(int), true);

}

// 5

// /

// 4

// /

// 3

// /

// 2

// /

// 1

void Test3()

{

int data[] = {5,4,3,2,1};

Test("Test3", data, sizeof(data)/sizeof(int), true);

}

// 1

// \

// 2

// \

// 3

// \

// 4

// \

// 5

void Test4()

{

int data[] = {1,2,3,4,5};

Test("Test4", data, sizeof(data)/sizeof(int), true);

}

// 树中只有1个结点

void Test5()

{

int data[] = {5};

Test("Test5", data, sizeof(data)/sizeof(int), true);

}

// 10

// / \

// 6 14

// /\ /\

// 4 8 12 16

void Test6()

{

int data[] = {10,6,4,8,14,16,12};

Test("Test6", data, sizeof(data)/sizeof(int), false);

}

void Test7()

{

Test("Test7", NULL, 0, false);

}

int main()

{

Test1();

Test2();

Test3();

Test4();

Test5();

Test6();

Test7();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: