首页 > 代码库 > 1501 二叉树最大宽度和高度
1501 二叉树最大宽度和高度
1501 二叉树最大宽度和高度
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 白银 Silver
题目描述 Description
给出一个二叉树,输出它的最大宽度和高度。
输入描述 Input Description
第一行一个整数n。
下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号。如果没有某个儿子为空,则为0。
输出描述 Output Description
输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开。
样例输入 Sample Input
5
2 3
4 5
0 0
0 0
0 0
样例输出 Sample Output
2 3
数据范围及提示 Data Size & Hint
n<16
默认第一个是根节点
以输入的次序为编号
2-N+1行指的是这个节点的左孩子和右孩子
注意:第二题有极端数据!
1
0 0
这题你们别想投机取巧了,给我老老实实搜索!
分类标签 Tags 点此展开
1 #include<iostream> 2 using namespace std; 3 int root; 4 int max_shendu=0; 5 int max_kuandu=1; 6 struct node 7 { 8 int parent; 9 int date;10 int lchild;11 int rchile;12 int sd;13 }a[101];14 int bl(int sd_now,int i)15 {16 //int flag1=0;17 //int flag2=0;18 a[i].sd=sd_now;19 if(a[i].sd>max_shendu)20 {21 max_shendu=a[i].sd;22 }23 if(a[i].lchild!=0)24 {25 // flag1=1;26 bl(sd_now+1,a[i].lchild);27 }28 if(a[i].rchile!=0)29 {30 // flag2=1;31 bl(sd_now+1,a[i].rchile);32 }33 /*if(flag1==1&&flag2==1)34 {35 max_kuandu++;36 }*/37 }38 int main()39 {40 int n;41 cin>>n;42 for(int i=1;i<=n;i++)43 {44 cin>>a[i].lchild>>a[i].rchile;45 a[a[i].lchild].parent=i;46 a[a[i].rchile].parent=i;47 }48 for(int i=1;i<=n;i++)49 {50 if(a[i].parent==0)51 {52 root=i;53 break;54 }55 }56 bl(0,root);57 for(int i=0;i<=max_shendu;i++)58 {59 int sum=0;60 for(int j=1;j<=n;j++)61 {62 if(a[j].sd==i)63 {64 sum++;65 }66 }67 if(sum>max_kuandu)68 {69 max_kuandu=sum;70 }71 }72 cout<<max_kuandu<<" ";73 cout<<max_shendu+1;74 return 0;75 }
1501 二叉树最大宽度和高度
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。