#swust oj971 和972统计利用先序遍历创建的二叉树的深度和宽度
971: 统计利用先序遍历创建的二叉树的深度
思路:
1.先序递归遍历创建二叉树
2.当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点
3.最后后序遍历算法统计二叉树深度
注:
1.求根节点左和右子树的深度,最后比较两者要加1
题目描述
利用先序递归遍历算法创建二叉树并计算该二叉树的深度。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#“时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树的深度(使用二叉树的后序遍历算法)。需要注意输入数据序列中的”#“字符和非”#“字符的序列及个数关系,这会最终决定创建的二叉树的形态。
输入
输入为先序遍历二叉树结点序列。
输出
对应的二叉树的深度。
样例输入
A##
ABC####
AB##C##
ABCD###E#F##G##
A##B##
样例输出
1
3
2
4
1
972: 统计利用先序遍历创建的二叉树的宽度
思路:
1.先序递归遍历创建二叉树
2.当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点
3再后序遍历算法统计二叉树深度
4.用数组来表示每一层的结点个数,求宽度,i表示层数从0开始,x是总层数(即深度),节点数+1的条件是当前节点!=NULL并且i<x,
5.递归:若当前节点非0,则再i+1递归它的左孩子和右孩子
注:
1.求根节点左和右子树的深度,最后比较两者要加1
题目描述
利用先序递归遍历算法创建二叉树并计算该二叉树的宽度。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符”#“时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树的宽度(是指二叉树每层节点数的最大值)。需要注意输入数据序列中”#“字符和非”#“字符的序列及个数关系,这会最终决定创建的二叉树的形态。
输入
输入为接受键盘输入的由大写英文字符和”#"字符构成的一个字符串(用于创建对应的二叉树)。
输出
输出该用例对应的二叉树的宽度。
样例输入
A##
ABC####
AB##C##
ABCD###EF##G###
A##B##
样例输出
1
1
2
3
1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define Max 1000
typedef char Datatype;
typedef struct node//定义节点
{Datatype data;struct node *lchild;struct node *rchild;}Btree;
void Creattree(Btree *&T)//创建二叉树
{char c;scanf("%c",&c);if(c=='#')//"#"时表示该结点不需要创建T=NULL;else//否则先序遍历创建{T=(Btree *)malloc(sizeof(Btree));//申请空间T->data=c;//先头结点Creattree(T->lchild);//再遍历根节点的左子树Creattree(T->rchild);//再遍历根节点的右子树}
}
void Free(Btree *&T)//释放
{if(T!=NULL){Free(T->lchild);Free(T->rchild);free(T);}}
int deep(Btree *T)//971求深度
{int ldep,rdep,max;if(T!=NULL)//树非空{ldep=deep(T->lchild);//先求根节点左子树的深度rdep=deep(T->rchild);//再求根节点右子树的深度max=ldep>rdep?ldep+1:rdep+1;//最后取两者最大return max;}elsereturn 0;
}int main()
{int x;Btree *T=NULL;Creattree(T);x=deep(T);printf("%d",x);Free(T);return 0;
}
void Wide(tree *T,int ce[],int i,int x)//972求宽度
{if(i<x&&T!=NULL)//i表示层数从0开始,x是总层数,节点数+1的条件是节点!=NULL并且i<x{ce[i]++;Wide(T->lchild,ce,i+1,x);//必须是+1不能是++Wide(T->rchild,ce,i+1,x);}
}
int main()
{tree *T;Creattree(T);int w,d,ce[100]={0},i=0,max=0;//用一个数组ce[]来表示每一层的结点个数d=deep(T);Wide(T,ce,i,d);for(int j=0;j<d;j++)//在ce[]中找出最多节点数{if(ce[j]>max)max=ce[j];}printf("%d",max);Free(T);return 0;
}
#swust oj971 和972统计利用先序遍历创建的二叉树的深度和宽度相关推荐
- 971: 统计利用先序遍历创建的二叉树的深度
971: 统计利用先序遍历创建的二叉树的深度 题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接 ...
- SWUSTOJ #971 统计利用先序遍历创建的二叉树的深度
SWUSTOJ #971 统计利用先序遍历创建的二叉树的深度 题目 输入 输出 样例输入 样例输出 源代码 题目 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按 ...
- SWUST OJ 971: 统计利用先序遍历创建的二叉树的深度
题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树 ...
- 数据结构之971: 统计利用先序遍历创建的二叉树的深度
题目: 代码: #include<iostream> using namespace std; typedef struct BinaryTree {char data;struct Bi ...
- #swust oj978,979,980输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序
输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序列 ***层次遍历思路: 1.初始化一个队列 2.把根节点指针入队 3.队列非空时:出队列取得一个结点指针,访问该节点,若该节点的左 ...
- SWUSTOJ #978 输出利用先序遍历创建的二叉树的中序遍历序列
SWUSTOJ #978 输出利用先序遍历创建的二叉树的中序遍历序列 题目 输入 输出 样例输入 样例输出 源代码 题目 利用先序递归遍历算法创建二叉树并输出该二叉树的中序遍历序列.先序递归遍历建立二 ...
- SWUST OJ#1051(数据结构之输出利用先序遍历创建的二叉树中的指定结点的Child结点)
目录 题目 思路 数据结构代码 小结 题目 思路 从根节点开始遍历,在节点不为空的前提下,进行类似与数学的分类讨论!!!接下来请各位看代码部分,有疑问评论区留言,有问必答!!! 数据结构代码 #inc ...
- SWUST OJ#1052 输出利用先序遍历创建的二叉树中的指定结点的双亲结点
目录 题目 思路 代码 题目 题目描述 利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的双亲结点.约定二叉树结点数据为单个大写英文字符.当接收的数据是字符"#"时表示该结点 ...
- SWUST OJ 978: 输出利用先序遍历创建的二叉树的中序遍历序列
题目描述 利用先序递归遍历算法创建二叉树并输出该二叉树的中序遍历序列.先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建 ...
最新文章
- 神秘使者到 Java 帝国传道协程,竟被轰了出去!
- Genymotion 模拟器 VirtualBox
- C++在构造函数中调用构造函数
- 【Java】15 输入输出
- C语言 | 编程实现6
- # 2019-2020.3 《java程序设计》第一周学习总结
- android sqlite 操作类封装,[Android] Sqlite 数据库操做 工具封装类
- linux内核计算list的长度,Linux内核通用链表 linux/list.h阅读
- 面试官,求求你不要问我这么简单但又刁难的算法题了
- Android 音视频深入 十九 使用ijkplayer做个视频播放器(附源码下载)
- 高通qca-wifi移植
- Android 原生插件开发步骤
- Webx.0-Web2.0:Web2.0
- Python编写端口扫描器
- 33暴力破解(MD5撞击)
- 希腊女孩创办自媒体教希腊语,如今用户已达1000人
- 自己定义微信图文模板注意事项整理
- OSPF3的多区域生成与链路状态通告
- 调试页面或样式一定要关闭拦截广告的插件
- 同学录退出了历史舞台了吗?