(算法)是否为二叉查找树的后序遍历数组
2015-09-21 22:38
260 查看
题目:
给定一数组,判断它是否为二叉查找树的后序遍历数组思路:
想想,二叉查找数树的特点,任意根结点大于左子树的所有值,而小于右子树的所有值;再想想,后序遍历的特点,先遍历左子树,再遍历右子树,最后是根结点;
因此很容易找到根结点,然后遍历数组找出左子树(从左往右比根结点小的),剩下右边的就是右子树,然后判断右子树是否都大于根结点:
如果是,则递归遍历左子树,遍历右子树,如果都满足了,则是某个二叉树的后序遍历数组;
如果不是,则不是。
代码:
#include<iostream> using namespace std; bool IsPostTraverse(int *A,int left,int right){ if(left>=right) return true; else{ int root=A[right]; int idx=left; while(idx<right && A[idx]<root) idx++; int mid=idx; while(idx<right){ if(A[idx]<root) return false; else idx++; } bool IsLeft=IsPostTraverse(A,left,mid-1); bool IsRight=IsPostTraverse(A,mid,right-1); if(IsLeft && IsRight) return true; else return false; } } int main(){ int A[]={3,5,8,13,7,15,10}; int n=sizeof(A)/sizeof(A[0]); cout << IsPostTraverse(A,0,n-1) <<endl; return 0; }
相关文章推荐
- Android自定义SurfaceView与传感器的并用(实现自绘的指北针)
- 跨页面传值自动刷新 操作文本与文件夹
- Linux下配置Mysql允许远程访问
- yii 2.0 windows环境搭建
- iOS激情详解之集合视图
- (转)Android最佳性能实践(二)——分析内存的使用情况
- javascript中五种常见的DOM方法
- 获取网页中图片
- 把https网站中的安全证书导入到java中的cacerts证书库
- STL list用法总结
- 较详细的介绍JNI
- Xcode Build Search Paths设置
- Bomb Game - HDU 2873 sg函数
- java基础之修饰符和内部类
- 多线程多文件上传
- 最大连续子数组积的线性解法
- java基础之修饰符和内部类
- 《Computer Vision: Algorithms and Applications》读书笔记(1)
- 激光雷达数据处理常用软件
- ios内联函数 inline