wikioi p1501 二叉树最大宽度和高度
2013-08-24 12:10
393 查看
这道题目的叙述有一点不清楚,这里的宽度指的是最大的单层结点个数。
下面是c代码
下面是Pascal代码:
下面是c代码
#include<stdio.h> #include<iostream> #include<queue> using namespace std; const int MAX_N = 21; int N; int l[MAX_N]; int r[MAX_N]; int wide[MAX_N]; int answide; int ansheight; int init() { scanf("%d",&N); int i; for (i=1;i<=N;i++) scanf("%d %d",&l[i],&r[i]); } int work(int t,int deep) { if (l[t]>0) { work(l[t],deep+1); wide[deep]++; } if (r[t]>0) { work(r[t],deep+1); wide[deep]++; } if (deep>ansheight) ansheight=deep; if (wide[deep]>answide) answide=wide[deep]; } int put() { if (N==1) answide=ansheight=1; printf("%d %d",answide,ansheight); } int main() { init(); work(1,1); put(); return 0; }
下面是Pascal代码:
program eee; var n,i,maxw,maxd:longint; lc,rc:array[1..10000]of longint; wid:array[1..10000]of longint; procedure go(dep,i:integer); begin if lc[i]>0 then begin inc(wid[dep]); go(dep+1,lc[i]); end; if rc[i]>0 then begin inc(wid[dep]); go(dep+1,rc[i]); end; if dep>maxd then maxd:=dep; end; begin readln(n);if n=1 then begin writeln(1,' ',1);exit;end; for i:=1to n do readln(lc[i],rc[i]); go(1,1); maxw:=wid[1]; wid[1]:=1; for i:=2to n do if wid[i]>maxw then maxw:=wid[i]; writeln(maxw,' ',maxd); end.
相关文章推荐
- 二叉树最大宽度和高度(java)
- AC日记——二叉树最大宽度和高度 1501 codevs
- 1501 二叉树最大宽度和高度
- codevs 1501二叉树最大宽度和高度
- 二叉树最大宽度和高度
- 1501 二叉树最大宽度和高度——http://codevs.cn/problem/1501/
- codevs1501 二叉树最大宽度和高度
- 1501 二叉树最大宽度和高度
- 二叉树中包括高度,深度,节点数,宽度,最大值等的递归和非递归方法
- 1501 二叉树最大宽度和高度
- 1501 二叉树最大宽度和高度 (BFS+树的遍历)
- wikioi天梯之1501 二叉树最大宽度和高度
- 1501 二叉树最大宽度和高度
- 1501 二叉树最大宽度和高度 (维基oi)
- codevs1501 二叉树最大宽度和高度
- 二叉树最大宽度和高度
- 二叉树最大宽度和高度
- Codevs 1501 二叉树最大宽度和高度 dfs
- 二叉树最大宽度和高度
- wikioi 二叉树最大高度和宽度