求二叉树的高度
来源:互联网 发布:小强软件测试 编辑:程序博客网 时间:2024/04/19 20:14
现在有一棵合法的二叉树,树的节点都用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
输入:
输入的第一行表示节点的个数n(1<=n<=1000),节点的编号为0到n-1组成,下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的的编号
输出
输出树的高度,为一个整数
样例输入:
5
0 1
0 2
1 3
1 4
#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;int getLength(int **data, int i, int j){ int length = 0; if (data[i][j] != -1) { //i->j可达 int max =0; for (int n = 0; n < 1000; n++) { int temp = getLength(data, j, n)+1; if (temp>max) { max = temp; } } if (max==0) { return 1; } return max; } else { return 1; }}int main(){ int n; scanf("%d", &n); int **data = new int*[1000]; for (int i = 0; i < 1000; i++) { data[i] = new int[1000]; } for (int i = 0; i < 1000; i++) { for (int j = 0; j < 1000; j++) { data[i][j] = -1; } } for (int i = 0; i < n - 1; i++) { int a, b; scanf("%d %d", &a, &b); data[a][b] = 1; } int lengthMax = -1; for (int i = 0; i < 1000; i++) { for (int j = 0; j < 1000; j++) { if (data[i][j] != -1) { int len = getLength(data, i, j); if (len>lengthMax) { lengthMax = len; } } } } cout << lengthMax << endl; return 0;}
结论:刚开始做这个题的时候,知道用递归或者循环的办法解决,选择数据结构首选是邻接矩阵,但是在写递归的时候,出现了错误,导致一直只有60%的测试用例通过,笔试结束后仔细写了一下算法的递归表达式,以及递归退出条件,这个代码应该是可以通过的,欢迎网友来吐槽修正。
1 0
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树的高度
- 求二叉树高度
- 求二叉树高度
- 求二叉树高度
- 求二叉树高度
- 求二叉树高度
- Android 上百实例源码分析以及开源分析
- Android为CheckBox(复选框)设置可规定大小的图片
- 在html页面上嵌入JavaScript代码的几种方式
- java代码块
- MongoDB如何确保一致性
- 求二叉树的高度
- MFC中利用ListCtrl的列标题获取列索引的方法
- textarea高度随文字增多变化高度
- 抽象类和接口
- burpsuite 配置代理无效
- 数据库中查找包含换行符的记录
- uva 11129An antiarithmetic permutation
- eclipse启动出现“An Error has Occurred. See the log file”解决方法
- HTTP中的重定向和请求转发的区别