1501 二叉树最大宽度和高度
#include<cstdio> #include<iostream> using namespace std; int a[30][3],b[30]; int main(){ int n,x,y,k,wide=0,deep=0; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d",&x,&y); a[i][0]=x;a[i][1]=y;//储存左右孩子 a[x][2]=i;a[y][2]=i;//储存其父节点 } for(int i=1;i<=n;i++){ k=1; x=a[i][2]; while(x!=0){ k++; x=a[x][2]; } b[k]++; if(k>deep) deep=k; if(b[k]>wide) wide=b[k]; } printf("%d %d\n",wide,deep); //wide--最下一层的宽度(上一层的某节点最多有几个孩子);deep--深度 return 0; }
复习二叉树
一般的树都可以转换为二叉树,且二叉树的存储结构及操作都较为简单,因此先介绍下树中的二叉树类型。
二叉树是n个结点的有限集,它或者是空集(n=0),或者有一个根结点及最多两棵互不相交的,分别称作这个根的左子树和右子树的二叉树组成。
二叉树有五种基本形态:(1)空集(2)根的左右子树都为空(3)根的右子树为空(4)根的左子树为空(5)根的左右子树皆不为空。
二叉树的逻辑结构:
二叉树与无序树不同,二叉树中,每个结点最多只能有两棵子树,并且无左右之分。另外,二叉树与度数为2的有序树不同,在有序树中,虽然一个极点的孩子之间是有左右次序的,但若该结点只有一个孩子,就无须区分其左右次序;而二叉树中,即使是一个孩子也有左右之分。所以,二叉树不是树的特殊情形。
二叉树的特殊性质(在此不证明):
(1)二叉树第i层上的结点数目最多为2i-1(i>=1);
(2)深度为k的二叉树至多有2k-1个结点(k>=1);
(3)在任意一颗二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1;
完全二叉树:若二叉树的高度为h,除第h层外,其他各层(1-h-1)的结点数都达到最大个数,并且最下一层上的结点都集中在该层最左边的若干位置上,则此二叉树被称为完全二叉树。
满二叉树:一颗深度为k且有2k-1个结点的二叉树称为满二叉树。
还有很多性质,在这不在多讨论。可以参考其他书籍。
顺序存储结构实现的主要思想:将一般二叉树填上一些空结点,使之成为“完全二叉树”,并且按完全二叉树形式给结点编号。其中的空结点便是顺序存储过程中浪费的空间。
参考:http://www.360doc.com/content/13/0422/18/3777348_280168665.shtml
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· 手把手教你更优雅的享受 DeepSeek
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现