1501 二叉树最大宽度和高度 (维基oi)
2013-11-28 20:26
330 查看
题目描述 Description
给出一个二叉树,输出它的最大宽度和高度。
输入描述 Input Description
第一行一个整数n。下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号。如果没有某个儿子为空,则为0。
输出描述 Output Description
输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开。
样例输入 Sample Input
52 3
4 5
0 0
0 0
0 0
样例输出 Sample Output
2 3
数据范围及提示 Data Size & Hint
n<16默认第一个是根节点
以输入的次序为编号
2-N+1行指的是这个节点的左孩子和右孩子
注意:第二题有极端数据!
1
0 0
这题你们别想投机取巧了,给我老老实实搜索!
题解:据说是小学生出的题!!!好吧。最大宽度就是二叉树的宽度,深度就是根节点到最低端的高度。。。好吧,自己都解释不清了。。。每个节点有两个儿子,依次搜索下去,高度一样的就用一个数组F存起来,就能知道这个高度的宽度。然后就没有然后了。。。
#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; int x,y; int a[100][3]; int f[100]; void DFS(int i,int k) { f[k]+=1; if (k>x) x=k; if (a[i][1]) DFS(a[i][1],k+1); if (a[i][2]) DFS(a[i][2],k+1); return; } int main() { int n,i; while (~scanf("%d",&n)) { memset(a,0,sizeof(a)); memset(f,0,sizeof(f)); x=0; for (i=1;i<=n;i++) scanf("%d%d",&a[i][1],&a[i][2]); DFS(1,1); y=0; for (i=1;i<=20;i++) if (f[i]>y) y=f[i]; printf("%d %d\n",y,x); } return 0; }
相关文章推荐
- 1501 二叉树最大宽度和高度 (BFS+树的遍历)
- 1501 二叉树最大宽度和高度
- codevs 1501 二叉树最大宽度和高度x
- 1501 二叉树最大宽度和高度
- wikioi天梯之1501 二叉树最大宽度和高度
- codevs 1501二叉树最大宽度和高度
- CODE[vs] 天梯 1501 二叉树最大宽度和高度
- codevs 1501 二叉树最大宽度和高度
- AC日记——二叉树最大宽度和高度 1501 codevs
- wikioi1501 二叉树最大宽度和高度
- codevs1501 二叉树最大宽度和高度
- Codevs 1501 二叉树最大宽度和高度 dfs
- code[vs] 1501 二叉树最大宽度和高度
- 1501 二叉树最大宽度和高度——http://codevs.cn/problem/1501/
- CODE[VS]1501 二叉树最大宽度和高度
- [深搜]CODEVS-1501 二叉树最大宽度和高度
- 二叉树最大宽度和高度(codevs1501)
- 二叉树的最大宽度和高度 1501
- Codevs 1501 二叉树最大宽度和高度(笔记)
- 1501 二叉树最大宽度和高度