SDUT 2482 二叉排序树
二叉排序树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描写叙述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上全部结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上全部结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要推断两序列是否为同一二叉排序树
输入
输出
演示样例输入
2 123456789 987654321 432156789 0
演示样例输出
NO NO
提示
来源
演示样例程序
#include<iostream>
#include<cstdio>
#include<cstring>using namespace std;char s[11],c[11];
int a[11],b[12],len,num=0,z[11];
struct Tree
{int data;Tree *L,*R;
}*Root;
Tree *Creat()
{Tree *p;p=new Tree;p->L=NULL;p->R=NULL;return p;
}
int HHH(Tree *root) //前序
{if(root!=NULL){z[num++]=root->data;HHH(root->L);HHH(root->R);}
}
int middle(Tree *root) //中序
{if(root!=NULL){middle(root->L);z[num++]=root->data;middle(root->R);}
}
Tree Build(Tree *root,int c[]) //排列树的建立
{Tree* p;root->data=c[0];for(int i=1; i<len; i++){p=root;while(1){if(p->data>c[i]){if(p->L==NULL){Tree *q;q=Creat();q->data=c[i];p->L=q;break;}elsep=p->L;}else{if(p->R==NULL){Tree *q;q=Creat();q->data=c[i];p->R=q;break;}elsep=p->R;}}}
}
int main()
{int n;while(~scanf("%d",&n)){if(n==0)break;Root=Creat(); //母树scanf("%s",s);len=strlen(s);for(int i=0; i<len; i++){a[i]=s[i]-'0';}num=0;Build(Root,a);//printf("%d",Root->L->data);middle(Root);int x[11],x1[11];for(int i=0; i<len; i++)x[i]=z[i];num=0;HHH(Root);for(int i=0; i<len; i++)x1[i]=z[i];// cout<<x[0];for(int i=0; i<n; i++) //各比較树{Tree *Root1;Root1=Creat();scanf("%s",c);int len1=strlen(c);if(len==len1){for(int i=0; i<len; i++){b[i]=c[i]-'0';}num=0;Build(Root1,b);middle(Root1);//cout<<Root1->data;int y[11],y1[11];for(int i=0; i<len; i++)y[i]=z[i];//cout<<x[0]<<y[0];int flag=0;for(int i=0; i<len; i++){if(x[i]!=y[i]) //中序判定{flag=1;break;}}if(flag==0){num=0;HHH(Root1); //后序判定for(int i=0; i<len; i++)y1[i]=z[i];for(int i=0; i<len; i++){if(x1[i]!=y1[i]){flag=1;break;}}}if(flag==0)printf("YES\n");else{printf("NO\n");}}else{printf("NO\n");}}}
}
转载于:https://www.cnblogs.com/llguanli/p/8726868.html
SDUT 2482 二叉排序树相关推荐
- sdut 二叉排序树
二叉排序树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 二叉排序树的定义 ...
- 数据结构实验之查找一:二叉排序树 (SDUT 3373)
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),也称二叉搜索树. #include <stdio.h> #include <s ...
- 数据结构(8-3)二叉排序树(查找、插入删除)
目录 一.基础理论 1.特点: 2.结构: 二.查找 三.插入 四.删除 1.被删除的结点D是叶子结点 2.被删除的结点D仅有一个孩子 2-1.删除结点14(有左无右) 2-2.删除结点 10 (有右 ...
- 二叉排序树的相关操作
#include <IOSTREAM.H> #include <STDLIB.H> //二叉树的生成和释放 typedef struct Node {int data;stru ...
- sdut 2401 最大矩形面积
1http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2401 /* 2 最大矩形面积,把边界点加上 ...
- sdut AOE网上的关键路径(spfa+前向星)
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2498&cid=1304 题目描述 一个无环的有向图称为无环图(Directed Acyc ...
- 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)
目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...
- 二叉排序树(完整代码)
目录 二叉排序树 1.二叉排序树(代码) P1087 FBI树 (建树) HDU 4707 Pet 二叉排序树 先序遍历:根->左->右 中序遍历:左->根->右 后序遍历:左 ...
- 二分查找与二叉排序树
文章目录 二分查找与二叉排序树 二分查找 1. 二分查找 2. 区间查找 3. 基于旋转数组的二分查找 二叉查找(排序)树 1. 插入节点 2. 查找节点 二分查找与二叉排序树 二分查找 1. 二分查 ...
- 平衡二叉排序树的创建和实现调整过程
1.已知一棵二叉树的先序序列为:abcedfgh,中序序列为:bcedaghf,画出该二叉树,并给出其后序序列. 2.已知一组关键字为(15,11,22,5,66,58,36,10,38),按照该元素 ...
最新文章
- mysql创建表语句 引擎、编码和字符集设置
- LaTeX如何让两张图并排显示
- celery 运行时 (from . import async, base)SyntaxError: invalid syntax 异常的解决方案
- 案例 | 锋芒易商如何做到年省 50 人天?
- 【数据结构与算法】之深入解析“地图分析”的求解思路与算法示例
- python有多少库存_库存究竟多少才算合理?
- 诺奖得主们年轻时都有哪些特征?擅长合作、论文高产是关键
- win7焦点总是不停丢失的解决方法
- openlayers 中的一些方法
- python简介pdf_Python以及QuTip包简介.PDF
- select2 清除已选项
- 安装配置文件共享协议(SAMBA)
- CUDA: 共享内存与同步
- Windows系统内置测试工具(winsat)
- 教你使用JAVA代码重启路由器(TP-LINK)
- codecademy SQL 编程系列二 Relation Databases Statements
- 自动透视校正为四边形对象
- java上传文件的要点_Uploadify上传文件方法
- Novell云计算大会在京开幕
- cs5 dreamweaver ox_dreamweaver cs5软件下载-dreamweaver cs5最新版本v11.0 官方版 - 极光下载站...