目录

#971 统计利用先序遍历创建的二叉树的深度

题目

思路

代码

#972  统计利用先序遍历创建的二叉树的宽度

题目

思路

代码


#971 统计利用先序遍历创建的二叉树的深度

题目

题目描述

利用先序递归遍历算法创建二叉树并计算该二叉树的深度。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树的深度(使用二叉树的后序遍历算法)。需要注意输入数据序列中的"#"字符和非"#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。

输入

输入为先序遍历二叉树结点序列。

输出

对应的二叉树的深度。

样例输入

A##
ABC####
AB##C##
ABCD###E#F##G##
A##B##

样例输出

1
3
2
4
1 

思路

树的深度,也就是树的最大层次。

统计二叉树的最大层次,也就是求出左子树的层次,右子树的层次,比较他们的大小,大的加1就是原来树的最大值了(这里加1是因为根节点没被算进),那么,如何求左右子树的最大层次呢?请在读一遍这句话。

比较大小,可以写一个max()函数。在#include <algorithm> 算法头文件中。

max(a,b);//返回a和b的最大值,注意a,b必须是同种定义类型
int Height(BinaryTree* &root) {if(root==NULL) return 0;//遇到空节点,返回,不再统计else return max(Height(root->left),Height(root->right))+1;//返回左子树或者右子树的最大值+1
}

代码

二叉树模板,二叉树介绍

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
typedef long long ll;
using namespace std;
// 定义二叉树
typedef struct BTNode{char data;BTNode* left;BTNode* right;
}BinaryTree;
//创建二叉树
void Create(BinaryTree* &root) {BTNode *q;q=new BTNode;cin>>q->data;if(q->data=='#') {root=q=NULL;return;}root=q;Create(root->left);Create(root->right);return;
}
//遍历深度
int Height(BinaryTree* &root) {if(root==NULL) return 0;else return max(Height(root->left),Height(root->right))+1;
}
int main() {BinaryTree* root;Create(root);cout<<Height(root);return 0;
}

#972  统计利用先序遍历创建的二叉树的宽度

题目

题目描述

利用先序递归遍历算法创建二叉树并计算该二叉树的宽度。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树的宽度(是指二叉树每层节点数的最大值)。需要注意输入数据序列中"#"字符和非"#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。

输入

输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。

输出

输出该用例对应的二叉树的宽度。

样例输入

A##
ABC####
AB##C##
ABCD###EF##G###
A##B##

样例输出

1
1
2
3
1

思路

树的宽度,也就是每层最大的节点数。

可以遍历所有节点,然后打一个数组储存该层的节点数。最后输出最大就行

int a[10005];//数组a表示储存第key层有几个节点
//key表示第几层,刚开始key为1,也就是第一层
int ans=0;//ans表示最终答案
void Wide(BinaryTree* &root,int key) {if(root==NULL) return;else {a[key]++;ans=max(ans,a[key]);//更新最大值Wide(root->left,key+1);Wide(root->right,key+1);}
}

代码

二叉树模板,二叉树介绍

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
typedef long long ll;
using namespace std;
// 定义二叉树
typedef struct BTNode{char data;BTNode* left;BTNode* right;
}BinaryTree;
//创建二叉树
void BTCreate(BinaryTree* &root) {BTNode *q;q=new BTNode;cin>>q->data;root=q;if(q->data=='#') {root=q=NULL;return;}BTCreate(root->left);BTCreate(root->right);return;
}
//返回二叉树宽度
int a[10005],ans=0;
void Wide(BinaryTree* &root,int key) {if(root==NULL) return;else {a[key]++;ans=max(ans,a[key]);Wide(root->left,key+1);Wide(root->right,key+1);}}
int main() {BinaryTree* root;BTCreate(root);Wide(root,1);cout<<ans;return 0;
}

SWUST OJ#971 #972 返回二叉树宽度和深度相关推荐

  1. SWUST OJ#978 #979 #980 二叉树的遍历

    目录 深度优先遍历 输出利用先序遍历创建的二叉树的前序遍历序列 思路 代码 #978 输出利用先序遍历创建的二叉树的中序遍历序列 题目 思路 代码 #979 输出利用先序遍历创建的二叉树的后序遍历序列 ...

  2. SWUST OJ 971求二叉树的深度

    题目 #inclde <iostream> #include <cstdlib> #define MAXN 100 using namespace std;typedef st ...

  3. SWUST OJ 971: 统计利用先序遍历创建的二叉树的深度

    题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树 ...

  4. swust oj 971

    统计利用先序遍历创建的二叉树的深度 10000(ms) 10000(kb) 3331 / 8436 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按照先序递归遍历 ...

  5. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Descr ...

  6. SWUST OJ 954单链表的链接

    swust oj 954 题目描述 建立长度为n的单链表A和长度为m的单链表B.编程实现将B表链接在A表的尾端,形成一个单链表A.数据类型指定为字符型. 输入 输出 样例输入 样例输出 源代码 #in ...

  7. swust oj#160促销计算

    SWUST OJ#160 题目描述 某百货公司为了促销,采用购物打折的优惠方法,每位顾客一次购物:在1000元以上者,按9.5折优惠:在2000以上者,按9折优惠:在3000以上者,按8.5折优惠:在 ...

  8. SWUST OJ 1168 喝可乐

    swust oj 1168 题目描述 小明十分喜欢喝可乐,有一次店家搞促销,用三个可乐瓶盖便可换一瓶新可乐.现在告诉你小明身上的钱和 每瓶可乐的单价,问你小明最多可以喝多少瓶可乐?(不能向老板借瓶盖) ...

  9. swust oj代码+解析_1165,0284,0074,0042,1171,0026,0189,0078,0046,0077,0209,0129

    swust oj 1165,0284(int a[n]\数字根),0074,0042,1171(矩阵相乘 输出对齐),0026/0189,0078(计算生日是星期几),0046,0077(计算员工周工 ...

最新文章

  1. 机器学习中的标量、向量、矩阵、和张量的概念
  2. strcpy +memcpy实现循环右移
  3. php7 变量,变量在PHP7内部的实现(一)
  4. Linux进程地址空间与进程内存布局详解,内核空间与用户空间
  5. php去掉查询返回的字段序列,php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回...
  6. 洛谷P3791:普通数学题(整除分块、前缀和)
  7. 腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的...
  8. python 3.8.2_python-3.8.2-docs-html
  9. javascript入门_您需要一个JavaScript入门工具包
  10. Python基础学习笔记之(二)
  11. FZU 2080 最大差值 二维单调队列(甚是巧妙……)
  12. 苹果x Android,中国发明安卓iPhoneX 安卓iPhoneX有何特别之处?
  13. 【SpringBoot整合NoSql】-----ElasticSearch的安装与操作篇
  14. TFT液晶屏使用自建的英文字库
  15. BurpSuite-安全测试神器之代理设置
  16. UVM设计模式 (三) 静态类、资源管理、uvm_event、uvm_*_pool、uvm_config_db、UVM_REGEX_NO_DPI
  17. python1到100奇数和_python计算1~100的和,1~100奇数的和,1~100偶数的和,一条代码求1~100的和...
  18. 原生JS【fiveKeyPress】2秒内五次点击键盘任意键(或组合键)触发自定义事件(以Pause/Break键为例)
  19. python中的随机数种子seed()
  20. C#实现改变图片的像素

热门文章

  1. 牛客网华为机试题(JavaScript)
  2. 分支过程灭绝概率matlab,某类遗传环境下的两性分支过程:有关伴Y基因的灭绝概率问题...
  3. 微信公众号开发之分享接口实现
  4. 一文全懂,Android程序员最新职业规划
  5. web中常见的HTTP错误码
  6. 手把手教你Linux虚拟机安装(超详细)
  7. TencentOS-tiny 时间管理(十 六)- 时间片轮转机制
  8. [ Linux ] 查看并修改时区
  9. gitlab修改时区
  10. Python \033显示为