swust oj 987
输出用先序遍历创建的二叉树是否为完全二叉树的判定结果
输入
- 输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。
输出
- 对应的二叉树是否为完全二叉树的判断结果。若是输出"Y",否则输出"N"。
样例输入
- A##
- ABC####
- AB##C##
- ABCD###EF##G###
- A##B##
- ABC##D##EG###
样例输出
- Y
- N
- Y
- N
- Y
- Y
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- #include<cstdlib>
- #include<cstdio>
- typedef char Datetype;
- using namespace std;
- Datetype value;
- int x;
- typedef struct link{
- Datetype date;
- struct link *lchild;
- struct link *rchild;
- }tree;
- typedef struct queue{
- tree *data;
- struct queue *next;
- }que;
- typedef struct {
- que *front;
- que *rear;
- }lin;
- void Initqueue(lin *&L)
- {
- L=(lin *)malloc(sizeof(lin));
- L->front=L->rear=NULL;
- }
- void destroyed(lin *&L)
- {
- que *p=NULL,*r=NULL;
- p=L->front;
- while(p!=NULL)
- {
- r=p;
- p=p->next;
- free(r);
- }
- free(L);
- }
- bool pop(lin *&L, tree *&e)
- {
- que *p;
- if(L->rear==NULL)
- return false;
- p=L->front;
- if(L->rear==L->front)
- L->front=L->rear=NULL;
- else
- L->front=p->next;
- e=p->data;
- free(p);
- return true;
- }
- int empty(lin *&L)
- {
- return (L->rear==NULL);
- }
- void push(lin *&L,tree *e)
- {
- que *p;
- p = (que *)malloc(sizeof(que));
- p->data=e;
- p->next=NULL;
- if(L->rear==NULL)
- {
- L->front=p;
- L->rear=p;
- }
- else
- {
- L->rear->next=p;
- L->rear=p;
- }
- }
- void creattree(tree *&L) //先序建立二叉树
- {
- char c;
- cin>>c;
- if(c=='#')
- L=NULL;
- else
- {
- L = (tree *)malloc(sizeof(tree)) ;
- L->date=c;
- creattree(L->lchild);
- creattree(L->rchild);
- }
- }
- void find(tree *L) //找树的棵树
- {
- if(L!=NULL)
- {
- x++;
- find(L->rchild);
- }
- }
- void destroytree(tree *&L) //销毁树
- {
- if(L!=NULL)
- {
- destroytree(L->lchild);
- destroytree(L->rchild);
- free(L);
- }
- }
- int deep(tree *L) //深度
- {
- int ldep,rdep,max;
- if(L!=NULL)
- {
- ldep=deep(L->lchild);
- rdep=deep(L->rchild);
- max=ldep>rdep?ldep+:rdep+;
- return max;
- }
- else
- return ;
- }
- void finddegree(tree *&L, int n) //找最大度数
- {
- if(L!=NULL)
- {
- if(x<n)
- x=n;
- finddegree(L->lchild,n);
- finddegree(L->rchild,n+);
- }
- }
- void run(tree *L) //层次遍历
- {
- tree *p=L;
- lin *qu;
- Initqueue(qu);
- if(L!=NULL)
- push(qu,p);
- while(!empty(qu))
- {
- pop(qu,p);
- cout<<p->date;
- if(p->lchild!=NULL)
- push(qu,p->lchild);
- if(p->rchild!=NULL)
- push(qu,p->rchild);
- }
- destroyed(qu);
- }
- void displayhou(tree *&L) //后序输出
- {
- if(L!=NULL)
- {
- displayhou(L->lchild);
- displayhou(L->rchild);
- cout<<L->date;
- }
- }
- void displaypre(tree *&L) //先序输出
- {
- if(L!=NULL)
- {
- cout<<L->date;
- displaypre(L->lchild);
- displaypre(L->rchild);
- }
- }
- void creatinpre(tree *&L ,char *in,char *pre,int x)//根据中先序确定后序
- {
- int k=;
- char *p;
- if(x<=)
- {
- L=NULL;
- return ;
- }
- L=(tree *)malloc(sizeof(tree));
- L->date = *pre;
- for(p=in ; p<in+x; p++)
- {
- if(*p==*pre)
- break;
- }
- k=p-in;
- creatinpre(L->lchild,in,pre+,k);
- creatinpre(L->rchild,p+,pre+k+,x-k-);
- }
- void creatinhou(tree *&L ,char *in,char *pre,int x) //根据中后序确定先序
- {
- int k=;
- char *p;
- if(x<=)
- {
- L=NULL;
- return ;
- }
- L=(tree *)malloc(sizeof(tree));
- L->date = *pre;
- for(p=in ; p>in-x; p--)
- {
- if(*p==*pre)
- break;
- }
- k=in-p;
- creatinhou(L->rchild,in,pre-,k);
- creatinhou(L->lchild,p-,pre-k-,x-k-);
- }
- void findson(tree *&L) //找指定节点的儿子
- {
- if(L!=NULL)
- {
- if(L->date==x)
- {
- if(L->lchild==NULL)
- cout<<"L:#";
- else
- cout<<"L:"<<L->lchild->date;
- if(L->rchild==NULL)
- cout<<",R:#";
- else
- cout<<",R:"<<L->rchild->date;
- return ;
- }
- findson(L->lchild);
- findson(L->rchild);
- }
- }
- void finddad(tree *&L) //找指定节点的父亲节点
- {
- if(L!=NULL)
- {
- if(L->lchild!=NULL&&L->lchild->date==x||L->rchild!=NULL&&L->rchild->date==x)
- {
- cout<<L->date;
- return ;
- }
- finddad(L->lchild);
- finddad(L->rchild);
- }
- }
- int find_the_one_degree(tree *&L) //找寻某指定节点的度
- {
- if(L!=NULL)
- {
- if(L->date==value)
- {
- if(L->lchild!=NULL&&L->rchild==NULL||L->lchild==NULL&&L->rchild!=NULL)
- return ;
- else if(L->lchild==NULL&&L->rchild==NULL)
- return ;
- else
- return ;
- }
- find_the_one_degree(L->lchild);
- find_the_one_degree(L->rchild);
- }
- }
- void exchange(tree *&L) //交换左右儿子的值
- {
- if(L!=NULL)
- {
- tree *p;
- p=L->lchild;
- L->lchild=L->rchild;
- L->rchild=p;
- exchange(L->lchild);
- exchange(L->rchild);
- }
- }
- void displayin(tree *&L) //中序输出
- {
- if(L!=NULL)
- {
- displayin(L->lchild);
- cout<<L->date;
- displayin(L->rchild);
- }
- }
- bool banlancetree(tree *&L) //平衡树
- {
- if(L==NULL)
- return true;
- int left=deep(L->lchild);
- int right=deep(L->rchild);
- int gas=left-right;
- if(gas>||gas<-)
- return false;
- return banlancetree(L->lchild)&&banlancetree(L->rchild);
- }
- bool perfecttree(tree *&L,int deepth) //完全二叉树的判定
- {
- if(L==NULL)
- return true;
- if(L->rchild!=NULL&&L->lchild==NULL)
- return false;
- if(x-deepth>&&L->rchild==NULL)
- return false;
- return perfecttree(L->lchild,deepth+)&&perfecttree(L->rchild,deepth+);
- }
- int main()
- {
- tree *L = NULL;
- creattree(L);
- x=deep(L);
- if(perfecttree(L,))
- cout<<"Y";
- else
- cout<<"N";
- destroytree(L);
- return ;
- }
swust oj 987的更多相关文章
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Des ...
- [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)
题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...
- SWUST OJ NBA Finals(0649)
NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128 Descri ...
- [Swust OJ 1023]--Escape(带点其他状态的BFS)
解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535 Descript ...
- [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)
题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)
题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...
- [Swust OJ 1026]--Egg pain's hzf
题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf ...
- [Swust OJ 1139]--Coin-row problem
题目链接: http://acm.swust.edu.cn/contest/0226/problem/1139/ There is a row of n coins whose values are ...
- [Swust OJ 385]--自动写诗
题目链接:http://acm.swust.edu.cn/problem/0385/ Time limit(ms): 5000 Memory limit(kb): 65535 Descripti ...
随机推荐
- C# IIS站点管理--Microsoft.Web.Administration.dll
Microsoft中提供了管理IIS7及以上版本一个非常强大的API - Microsoft.Web.Administration.dll,利用该API可以让我们很方便的以编程的方式管理和设定IIS的 ...
- web文件下载
web页面实现文件下载的几种方法 今天碰到文件下载的一些问题,本着知其然也要知其所以然的精神,站在巨人的肩膀上深入学习和测试了一下,抛砖引玉,现在总结结论如下: 1)标准URL下载方式可以通过在web ...
- face++ php
总流程是先上传文件,保存到后台,获取返回来的face_token保存下来,然后拿face_token添加到faceSet里面去,搜索的时候结果会返回faceSet里面的face_token 1.dem ...
- JS学习过程中碰到的小问题
使用循环语句查找通讯录 //Setup var contacts = [ { "firstName": "Akira", "lastName" ...
- sortable.js 拖拽排序及配置项说明
// 拖动排序 $(function() { /*排序*/ //排序 // Simple list ]; new Sortable(list, { group: "name", a ...
- 解决 DBMS_AW_EXP: BIN$*****==$0 not AW$
在Oracle 11.2.0.4 版本的数据库中,使用数据泵导出数据时,有可能会遇到这样的提示: 示例1 Connected to: Oracle Database 11g Enterprise Ed ...
- L1-049 天梯赛座位分配
L1-049 天梯赛座位分配 (20 分) 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i ...
- 【玩转开源】基于Docker搭建Bug管理系统 MantisBT
环境Ubuntu18.04 + Docker 1. Docker Hub 链接:https://hub.docker.com/r/vimagick/mantisbt 这里直接使用docker命令的方式 ...
- Win7共享文件夹简单?这个共享问题可以难倒90%的人
信息化社会,没有哪个公司不用电脑办公了.一个办公室里面的同事相互之间利用系统的共享功能,共享一些文件和软件已经是司空见惯的了,这个不需要多么复杂的操作.我们使用最多的windows7操作系统就能很方便 ...
- app:利用HBuilder打包webpack项目
1.安装HBuilder 2.将你的项目在HBuilder中打开 3.控制台 打包编译 npm run build 4.新建一个app项目,将项目编译生成的dist文件夹 ,复制到app项目中 5.双 ...