二叉搜索树的后续遍历序列
2015-06-11 11:19
253 查看
题目:输入一个整数数组 判断该数组是不是某二叉搜索树的后续遍历结果 如果是则返回true 否咋返回false 假设输入数字的任意两个数字都互不相同
后序遍历是左->右->根 左<根<右
数组最后一个值t为根结点的值
数组中小于t的为树的左孩子 之后的应当为右孩子 且所有的右孩子大于根t 若存在不大于t的值 则表明不是二叉搜索树的后序遍历顺序
然后递归判断左孩子和右孩子是否为二叉搜索树
递归遍历结束条件是 遍历到叶节点~
#include <iostream>
using namespace std;
//struct BinaryTreeNode
//{
// int m_nValue;
// BinaryTreeNode *m_pLeft;
// BinaryTreeNode *m_pRight;
//};
bool ispost(int *A,int n)
{
//
int i=0;
int j=0;
if(n<=1)
return true;
int t=A[n-1];
while(t>A[i])
i++;
j=i;
while(i<n-1)
{
if(t>A[i])
return false;
i++;
}
return ispost(A,j)&&ispost(A+j,n-1-j);
}
int main()
{
int n;
cin>>n;
int *A=new int
;
for(int i=0;i<n;i++)
cin>>A[i];
cout<<ispost(A,n)<<endl;
delete []A;
return 0;
}
后序遍历是左->右->根 左<根<右
数组最后一个值t为根结点的值
数组中小于t的为树的左孩子 之后的应当为右孩子 且所有的右孩子大于根t 若存在不大于t的值 则表明不是二叉搜索树的后序遍历顺序
然后递归判断左孩子和右孩子是否为二叉搜索树
递归遍历结束条件是 遍历到叶节点~
#include <iostream>
using namespace std;
//struct BinaryTreeNode
//{
// int m_nValue;
// BinaryTreeNode *m_pLeft;
// BinaryTreeNode *m_pRight;
//};
bool ispost(int *A,int n)
{
//
int i=0;
int j=0;
if(n<=1)
return true;
int t=A[n-1];
while(t>A[i])
i++;
j=i;
while(i<n-1)
{
if(t>A[i])
return false;
i++;
}
return ispost(A,j)&&ispost(A+j,n-1-j);
}
int main()
{
int n;
cin>>n;
int *A=new int
;
for(int i=0;i<n;i++)
cin>>A[i];
cout<<ispost(A,n)<<endl;
delete []A;
return 0;
}
相关文章推荐
- The method getJspApplicationContext(ServletContext
- Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法
- MFC中自定义消息
- java多线程控制-信号量Semaphore
- HelloWorld 之JasperReports初步
- 二维码生成及扫描
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- 转载:CSS计数器的趣味时光之css计算数据
- 剑指offer 10- 二进制中1的个数
- a 标签在火狐下会请求两次
- 简介JavaScript中的setHours()方法的使用
- 马云如何管理阿里巴巴:法乎其上
- Selenium2.0之WebDriver学习总结(2)
- safdsgsf
- Android的Proxy/Delegate Application框架
- Akka TypedActor 和UnTypedActor
- 自己动手写 android 数据库(1)
- 轻松取得高分--扫清GRE考试中词汇问题
- 为你的Android App实现自签名的 SSL 证书
- Redis大冒险