暑假集训8.10 sdutoj2482 二叉排序树 (是否为同一颗排序树)
来源:互联网 发布:php获取表单数据 编辑:程序博客网 时间:2024/05/17 23:17
二叉排序树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
输出
见下
示例输入
21234567899876543214321567890
示例输出
NONO
方法一:遍历数组元素,数组元素与第一个元素比较 分两个数组 大于第一个元素放在pre数组 小于的话放在last数组
然后后面数组也如上操作
遍历结束后 比较两个字符数组的pre和last数组 看是否相同 一旦不相同 no;
注 数组第一个元素不同 一定 NO;
样例
3
3142 {1,2}3{4}
3124(yes){1,2}3{4}
3214(no) {2,1}3{4}
4123(no) {1,2.3}4{}
字符数组模拟实现 不贴代码了...太low......
方法二:叮咚~
毕竟不是比赛,所以还是规规矩矩的敲排序二叉树吧
注:此为建立一棵树的方法 So多了一个flag
///ACcode
#include <bits/stdc++.h>using namespace std;typedef struct tree{ int data; int flag; ///用来判断来没来过 tree *lc,*rc;} tree ,*Tree;void Insert(Tree &T,int key) ///递归插入排序二叉树{ if (!T) { T=new tree; T->data=key; T->lc=NULL; T->rc=NULL; T->flag=0; ///初始0 设为没查找到过 } else if (key > T->data) { Insert(T->rc,key); } else if (key < T->data) { Insert(T->lc,key); }}bool TF=1; ///判断 Yes(TF=1) or No(0) 的变量void Find(Tree &T,int key) ///查找函数{ if (TF) { if (T->flag==0) ///表示没查找到过 { if (key==T->data) ///如果两值相等 标记flag=1; { T->flag=1; } else ///如果不等 则 "NO"..因为按照插入的顺序Find 某个元素之前是不会有没被找到过的(就是这个元素之前没有flag=0的) { TF=0; return ; } } if (T->flag==1) ///如果之前查找到过 则继续Find..... { if (key > T->data) { Find(T->rc,key); } else if (key < T->data) { Find(T->lc,key); } } }}void Reset(Tree &T) ///重置一下flag=0;{ if (T) { T->flag=0; Reset(T->lc); Reset(T->rc); }}int main(){ int n,m,i,num,key; Tree T; while (cin>>n&&n) { cin>>m; T=NULL; for (i=1; i<=n; i++) { cin>>num; Insert(T,num); } for (int j=1; j<=m; j++) { TF=1; ///重置一下 TF for (i=1; i<=n; i++) { cin>>key; Find(T,key); } Reset(T); ///重置一下 flag TF==1?cout<<"Yes"<<endl:cout<<"No"<<endl; } } return 0;}
方法三:两棵树~未完待续...
1 0
- 暑假集训8.10 sdutoj2482 二叉排序树 (是否为同一颗排序树)
- 判断一颗二叉树是否为二叉排序树
- 判别二叉树是否为二叉排序树
- 判断二叉树是否为二叉排序树
- 判断二叉树是否为二叉排序树
- 判断二叉树是否为二叉排序树
- 【数据结构 是否为二叉排序树】
- 是否为同一棵二叉搜索树
- 是否同一颗二叉树
- 13周是否为二叉排序树
- 判断一棵树是否为二叉排序树
- 暑假集训
- 暑假集训
- 暑假集训
- 暑假集训
- 判断一颗二叉树是否为二叉排序树(java实现)
- 判断给定的二叉树是否为二叉排序树
- 编写判断给定二叉树是否为二叉排序树的函数
- 大牛的《深度学习》笔记,60分钟带你学会Deep Learning
- BZOJ 3029: 守卫者的挑战
- 洛谷1966 火柴排队
- Windows环境下配置Java环境变量
- Android5.0--- Toolbar
- 暑假集训8.10 sdutoj2482 二叉排序树 (是否为同一颗排序树)
- Struts2上传文件
- POJ-1159 回文串 【LSC DP or +滚动数组省空间】
- Android studio运行时卡顿
- java基本语法学习漏点总结
- 2016暑期集训1B 构造回文字符串
- 求两个大数的和
- LintCode:线段树的查询II
- C#控制台基础 可空类型与非可空类型 相互转换