L2-004. 这是二叉搜索树吗?
来源:互联网 发布:交换机端口隐射功能 编辑:程序博客网 时间:2024/06/05 10:36
一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,
- 其左子树中所有结点的键值小于该结点的键值;
- 其右子树中所有结点的键值大于等于该结点的键值;
- 其左右子树都是二叉搜索树。
所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。
给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。
输入格式:
输入的第一行给出正整数N(<=1000)。随后一行给出N个整数键值,其间以空格分隔。
输出格式:
如果输入序列是对一棵二叉搜索树或其镜像进行前序遍历的结果,则首先在一行中输出“YES”,然后在下一行输出该树后序遍历的结果。数字间有1个空格,一行的首尾不得有多余空格。若答案是否,则输出“NO”。
输入样例1:78 6 5 7 10 8 11输出样例1:
YES5 7 6 8 11 10 8输入样例2:
78 10 11 8 6 7 5输出样例2:
YES11 8 10 7 5 6 8输入样例3:
78 6 8 5 10 9 11输出样例3:
NO
也就是建树和后序遍历模板的问题吧
#include<iostream>#include<cstdio>#include<string.h>using namespace std;int n,v=0;int a[1005],b[1005];struct node{ int data; node *lson,*rson; node():lson(NULL),rson(NULL){}};node *root;int judge(int flag,int l1,int r1){ if(l1>r1) return 1; int i; for( i=l1+1;i<=r1;i++) { if(flag==1) { if(a[i]>=a[l1]) break; } else { if(a[i]<a[l1]) break; } } int flag1=0; for(int j=i;j<=r1;j++) { if(flag) { if(a[j]<a[l1]) flag1=1; } else { if(a[j]>=a[l1]) flag1=1; } } if(flag1) return 0; else return judge(flag,l1+1,i-1)&&judge(flag,i,r1);}node * build(int flag,int l1,int r1){ if(l1>r1) return NULL; int i; for( i=l1+1;i<=r1;i++) { if(flag==1) { if(a[i]>=a[l1]) break; } else { if(a[i]<a[l1]) break; } } node *p=new node(); p->data = a[l1]; p->lson=build(flag,l1+1,i-1); p->rson=build(flag,i,r1); return p;}void keep(node *p){ if(p!=NULL) { keep(p->lson); keep(p->rson); b[v++]=p->data; }}int main(){ while(scanf("%d",&n)==1) { if(n==0) printf("YES\n"); else { for(int i=1;i<=n;i++) scanf("%d",&a[i]); int flag=0; if(judge(1,1,n)) { flag=1; root=build(1,1,n); } else if(judge(0,1,n)) { flag=1; root=build(0,1,n); } if(flag) { printf("YES\n"); keep(root); for(int i=0;i<n;i++) { if(i) printf(" "); printf("%d",b[i]); } printf("\n"); } else printf("NO\n"); } } return 0;}
0 0
- L2-004. 这是二叉搜索树吗?
- PAT L2-004. 这是二叉搜索树吗?
- PAT L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- PAT L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗
- PAT--L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗?
- L2-004. 这是二叉搜索树吗? (搜索二叉树的性质)
- 回调的简单理解
- android studio 生成全局变量的快捷键
- php7 五大新特性
- UIScrollView常用属性/常用代理方法总结
- solr最新应用链接分享
- L2-004. 这是二叉搜索树吗?
- linux用户权限
- Java初始化顺序
- centos scp传输不需密码
- 线程利用管道字节(字符)流进行通信
- git忽略文件改变配置
- C++模板
- GitLab8.9修改项目地址
- Cocos2d-x 3.x项目导Eclipse出现 The import org.cocos2dx.lib cannot be resolved错误