二叉搜索树的后序遍历序列
2015-08-22 21:49
281 查看
题目:
输入一个整形数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false. 假设输入的数组的任意两个数字都互不相同.
例如输入数组{5,7,6,9,11,10,8},则返回true.
{7,4,6,5}则返回false.
思路:
后序遍历最后一个结点是根结点. 从第一个结点开始,找第一个大于根结点的结点,则这个结点的左边是左子树,右边是右字数.判断右子树有没有小于根结点的结点,如果有则不符合二叉搜索树的特性.若没有,则递归判断左右子树.
输入一个整形数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false. 假设输入的数组的任意两个数字都互不相同.
例如输入数组{5,7,6,9,11,10,8},则返回true.
{7,4,6,5}则返回false.
思路:
后序遍历最后一个结点是根结点. 从第一个结点开始,找第一个大于根结点的结点,则这个结点的左边是左子树,右边是右字数.判断右子树有没有小于根结点的结点,如果有则不符合二叉搜索树的特性.若没有,则递归判断左右子树.
[code]bool VerifySquenceOfBST(int arr[], int length) { if (arr == NULL || length <= 0) return false; int root = *(arr+length-1); int i = 0; for (; i < length - 1; ++i) { if (arr[i] > root) break; } int j = i; for (; j < length - 1; ++j) { if (arr[j] < root) return false; } bool left = true; if (i > 0) left = VerifySquenceOfBST(arr,i); bool right = true; if (i < length - 1) right = VerifySquenceOfBST(arr + i, length - i - 1); return left&&right; } //同样的方法,我们也可以得到前序遍历序列 bool VerifyPreOrderOfBST(int arr[], int length) { if (arr == NULL || length <= 0) return false; int root = arr[0]; int i = 1; for (; i < length; ++i) { if (arr[i] > root) break; } int j = i; //日了*了,这里把for写成了fot,提示我括号和分号不对,我找了10几分钟眼睛都快 //花了!!! for (; j < length; ++j) { if (arr[j] < root) return false; } bool left = true; if (i > 1) left = VerifyPreOrderOfBST(arr+1, i); bool right = true; if (i < length) right = VerifyPreOrderOfBST(arr+i, length - i); return left&&right; } void Test() { printf("Test postOrder:\n"); int arr[] = {5,7,6,9,11,10,8}; bool res1 = VerifySquenceOfBST(arr,7); int arr1[] = {7,4,6,5}; bool res2 = VerifySquenceOfBST(arr1,7); bool res3 = VerifySquenceOfBST(NULL,1); printf("res1: %d\n",res1); printf("res2: %d\n",res2); printf("res3: %d\n",res3); printf("Test PreOrder:\n"); int arr2[] = {8,6,5,7,10,9,11}; bool res4 = VerifyPreOrderOfBST(arr2,7); int arr3[] = {8,6,5,10,9,7,11}; bool res5 = VerifyPreOrderOfBST(arr3,7); printf("res4: %d\n",res4); printf("res5: %d\n",res5); }
相关文章推荐
- Unity3D开发——LeRunning商店系统的实现
- Beginning SDL 2.0(6) 音频渲染及wav播放
- 微信抢红包优化版
- POJ-1011 sticks 棍棒拼接
- HDU 5419 细节处理
- 非归档模式下利用冷备恢复数据库
- 基于递归神经网络的人脸识别探究
- 第七章 Hyper-V 2012 R2 授权管理
- Tomcat8源码编译及导入Eclipse中研究
- 欢迎使用CSDN-markdown编辑器
- 封装RabbitMQ.NET Library 的一点经验总结
- securet crt不能配置了
- 001-NSString的常用功能
- POJ 2263 Heavy Cargo (SPFA+Dijkstra,最短路变形)
- hdu5417(BC)
- POJ 2263 Heavy Cargo (SPFA+Dijkstra,最短路变形)
- Codeforce 515 B . Drazil and His Happy Friends
- MySQL必知必会(使用子查询)
- Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库
- 编写高质量代码改善C#程序的157个建议——建议118:使用SecureString保存密钥等机密字符串