一个二叉树的问题,求指点指点(第一次发帖,见谅)
描述又是晴朗的一天,小明在吃完午饭回宿舍的路上,看到了一颗高高的树,一时兴起,想看看这颗树有多高,为了简单起见,小明将树看成一棵二叉树,二叉树的根的高度看成1,
现在的问题就是给定一棵二叉树,请你计算这棵二叉树的高度(即这棵二叉树一共有几层)。
输入
多组测试数据,处理到文件结尾。
每个测试数据第一行输入一个整数n,代表这个二叉树的节点个数,接下来有n-1行,每一行有2个整数s和e,代表节点s是e的父亲节点。规定编号为1的点为根节点。
不保证测试数据为完全二叉树。
10000>=n>0
n>=s,e>0
输出
输出占一行,代表这棵二叉树的高度。
样例输入
3
1 2
1 3
4
3 4
1 2
1 3
样例输出
2
3
这是题目,下面是我的代码,一直wrong,大神帮忙看看,谢谢。
说说我的思路;算并查集的思想吧,先将n个节点初始化为0,之后只要输入两个数x,y,就将y并到x里。。比如3个节点,开始时f[1]=0,f[2]=0,f[3]=0;输入1,2就有f[3]=1;再输入1,3就有f[2]=1;这是有f[1]=0;f[2]=1,f[3]=1;之后再对f[]数组排序,之后找到里面有多少个不同的数就说明有多少个数加1层。。描述的不大清楚,语文拙计。。。望大神指点一二吧。。
程序代码:
#include<stdio.h> int f[10002]; int main() { int i,j,k,n,x,y,tem,num; while(scanf("%d",&n)!=EOF) { num=0; for(i=1;i<=n;i++) f[i]=0; num=1; for(i=0;i<n-1;i++) { scanf("%d%d",&x,&y); f[y]=x; } for(i=1;i<n;i++) { k=i; for(j=i+1;j<=n;j++) if(f[j]<f[k]) k=j; if(k!=i) { tem=f[i]; f[i]=f[k]; f[k]=tem; } } for(i=1;i<n;i++) { if(f[i]!=f[i+1]) num++; } printf("%d\n",num); } return 0; }
[ 本帖最后由 flfw1314 于 2013-6-17 21:38 编辑 ]