二叉搜索树的后序遍历序列
2015-08-31 11:09
218 查看
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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 16 void Test1() { int data[] = {4, 8, 6, 12, 16, 14, 10}; Test("Test1", data, sizeof(data)/sizeof(int), true); } // 5 // / \ // 4 7 // / // 6 void Test2() { int data[] = {4, 6, 7, 5}; Test("Test2", data, sizeof(data)/sizeof(int), true); } // 5 // / // 4 // / // 3 // / // 2 // / // 1 void Test3() { int data[] = {1, 2, 3, 4, 5}; Test("Test3", data, sizeof(data)/sizeof(int), true); } // 1 // \ // 2 // \ // 3 // \ // 4 // \ // 5 void 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; }
相关文章推荐
- Linux:chmod -R 777 * 是什么意思?
- SQL ---指令实例语句
- 初到Hp实训基地感受
- WEB中配置错误页面
- 详解C语言中的wait()函数和waitpid()函数
- UCenter应用同步登录分析
- Java数组学习练习3冒泡排序数组代码
- LearningSpark6.1
- ARM 的指令集
- 使用Python的requests库进行接口测试——session对象的妙用
- 关于改变Bitmap透明度
- jdbc连接postgresql
- SPOJ Optimal Marks(最小割的应用)
- 关于sd卡的读取权限
- Android中的内部类引起的内存泄露
- linux 命令汇总
- 读书笔记之UNIX环境高级编程(8)
- python 可变不可变类型
- Maven简介(三)——profile介绍
- 华为机试题