判断二叉搜索树的后续遍历序列
2013-06-17 15:45
169 查看
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
#include <iostream> using namespace std; bool ispostorder(int a[], int len) { if(a==NULL || len<=0) return false; int root = a[len-1];//数组最后一个数字是二叉搜索树的根节点 int i; for(i=0;i<len-1;i++) { if(a[i]>root)//i为二叉搜索树右子树的起始坐标 break; } int j = i; for(;j<len-1;j++) { if(a[j]<root)//如果右子树中存在大于root的数字,则该数组不是后续遍历序列 return false; } bool left = true;//先设为true,防止没有左子树的情况 if(i>0) left = ispostorder(a,i);//如果有左子树,则遍历左子树 if(!left) return false;//如果左子树不正确,则无需遍历右子树,直接返回false bool right = true;//先设为true,防止没有右子树的情况 if(i<len-1) right = ispostorder(a+i,len-1-i);//如果有右子树,则遍历右子树 return left&&right;//返回左子树和右子树的与值 } int main() { int a[] = {5,7,6,9,11,10,8}; int len_a = sizeof(a)/sizeof(int); int b[] = {7,4,6,5}; int len_b = sizeof(b)/sizeof(int); int i; cout<<"数组a为:"<<endl; for(i=0;i<len_a;i++) cout<<a[i]<<" "; cout<<endl; bool flag; flag = ispostorder(a,len_a); if(flag) cout<<"该数组是二叉搜索树的后续遍历序列"<<endl; else cout<<"该数组不是二叉搜索树的后续遍历序列"<<endl; cout<<"数组b为:"<<endl; for(i=0;i<len_b;i++) cout<<b[i]<<" "; cout<<endl; flag = ispostorder(b,len_b); if(flag) cout<<"该数组是二叉搜索树的后续遍历序列"<<endl; else cout<<"该数组不是二叉搜索树的后续遍历序列"<<endl; return 0; }
相关文章推荐
- 判断一个序列是否为某二叉搜索树的后续遍历结果
- 剑指offer 二叉搜索树后续遍历序列 判断
- 剑指offer:二叉搜索树的后序遍历序列(判断一个数组是否是二叉搜索树的后续遍历序列)
- 剑指offer 面试题24 判断二叉搜索树后续遍历序列
- 判断整数序列是不是二元查找树的后续遍历
- 输入一个数列,判断是否为某一个二叉搜索树的后序遍历序列
- 判断二叉树的后续遍历序列
- 二叉搜索树的后序遍历序列序列判断是否是二叉搜索树
- 【剑指Offer】面试题24:二叉搜索树的后续遍历序列
- 4000 面试题:二叉搜索树的后续遍历序列
- 剑指offer系列之二十二:二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 判断数组是否是二叉搜索树的后序遍历序列 JAVA实现
- 20、二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 微软面试之9题 判断整数序列是不是二元查找树的后续遍历结果
- 剑指offer面试题 二叉搜索树的后续遍历序列