当前位置: 首页 > news >正文

SCAU 18924 二叉树的宽度

文章目录

  • 题目描述
      • Description
      • 输入格式
      • 输出格式
      • 输入样例
      • 输出样例
  • 思路
  • 代码

本菜鸡第一次写blogT T,开始好好学习。
输入输出使用了C++的iostream。

题目描述

Description

二叉树的宽度指的是具有节点数目最多的那一层的节点个数。
1
/ \
2 3
/
4
答案为2, 第二层节点数最多,为2个节点。

输入格式

共n行。
第一行一个整数n,表示有n个结点,编号为1至n。(1<=n<=50)
第二行至第n行,每行有两个整数x和y,表示在二叉树中x为y的父节点。x第一次出现时y为左孩子

输出格式

输出二叉树的宽度。

输入样例

5
1 2
1 3
2 4
2 5

输出样例

2

思路

( 2021/06/02:oj上似乎新增了一个案例,是像下图这样的父节点还没出现,它的孩子先出了,于是就先用另外一个结构体临时将数据保存起来,用sort函数根据父节点的数字编号排个序,其他照旧就可以了)大概是新增的吧哈哈哈哈TwT

通过一个数组level记录每一个结点所在的层数,用结点对应数字作为下标进行存储。
结点的层数=父节点的层数+1,通过父结点的数字可以找到level数组中记录的父结点的层数。

用一个数组A存储每一层的结点个数。
在记录每一个结点的层数level时,level层的结点个数自增一。
用Max记录最大的层节点数。
并比较当前level的个数是否最大,更新Max。

代码

#include <iostream>
#include <algorithm>
using namespace std;
#define For(i,a,b) for(int i=a;i<b;i++)
//存储结点对应的层数
int level[100];
//临时存放数据的结构体数组
/*----*/
typedef struct dataTemp
{
    int parent;
    int child;
    //父结点小的排在前面
    //内嵌运算符重定义,这样子直接sort就可以了,不需要另外定义一个bool函数
    bool operator <(const dataTemp &d)const{
    return parent<d.parent;}
}T;
T temp[100];
/*----*/


//A[i]用来存储第i层的结点个数
int A[10005]= {0};

int main()
{
    int n;//结点的总个数
    cin>>n;
    //特殊情况 结点个数为1时二叉树的宽度为1
 	if(n==1)
        cout<<1<<endl;
    else
    {
    //有改动的地方
    /*----*/
        For(i,0,n-1)
    	{
    	//先放进临时结构体数组里面
    	    cin>>temp[i].parent>>temp[i].child;
    	}
    	//让结构体数组中保存的父节点与子节点的关系,
    	//根据父节点的数字编号,从小到大排序
    	//相当于是把数据先整理一下吧
    	sort(temp,temp+n-1);
		level[temp[1].parent]=1;
		 int Max=0;
    	For(i,0,n-1)
    	{
    		int p,c;
    		p=temp[i].parent;
    		c=temp[i].child;
	        //记录子节点的层数,为父节点的层数+1  
			level[c]=level[p]+1;
	            //该层的结点个数自增1
	            A[level[c]]++;
	            //比较该层的结点个数是否最大,更新Max
	            if(A[level[c]]>Max)
	            Max=A[level[c]];
	    }
	    //输出最大的层结点个数
	    cout<<Max<<endl;
    }
    return 0;
}

相关文章:

  • SCAU 18724 二叉树的遍历运算
  • SCAU 18923 二叉树的直径
  • 关于JavaScript中整数数字不能直接调用方法
  • SCAU 发牌程序(java)
  • CSS flex布局 flex-grow不为1 items始终均匀分配剩余空间问题
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [Symbol.toPrimitive](hint) hint 什么时候为 default?
  • JavaScript 对象遍历方法及其遍历顺序的总结
  • vue 实现根据窗口大小自适应图片预览
  • 《计算机网络 自顶向下方法》笔记 - 第二章 应用层
  • 使用 BrowserRouter 报错 invaild hook call 解决方案
  • python中assert关键字的作用
  • CSS3 :nth-child(n)用法
  • CSS3中的transition属性详解
  • HTML中导航栏title前面小图标的实现
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • egg(89)--egg之redis的发布和订阅
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • exif信息对照
  • LintCode 31. partitionArray 数组划分
  • Redis 中的布隆过滤器
  • SOFAMosn配置模型
  • SpiderData 2019年2月13日 DApp数据排行榜
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue全家桶实现一个Web App
  • web标准化(下)
  • yii2中session跨域名的问题
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 那些年我们用过的显示性能指标
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 试着探索高并发下的系统架构面貌
  • 数据科学 第 3 章 11 字符串处理
  • 听说你叫Java(二)–Servlet请求
  • 用Visual Studio开发以太坊智能合约
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 我们雇佣了一只大猴子...
  • # include “ “ 和 # include < >两者的区别
  • #{}和${}的区别是什么 -- java面试
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (4)logging(日志模块)
  • (70min)字节暑假实习二面(已挂)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C++)八皇后问题
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (万字长文)Spring的核心知识尽揽其中
  • (循环依赖问题)学习spring的第九天
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • *1 计算机基础和操作系统基础及几大协议
  • .md即markdown文件的基本常用编写语法
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .Net 垃圾回收机制原理(二)
  • .NET设计模式(2):单件模式(Singleton Pattern)