树的高度

Posted y119777

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树的高度相关的知识,希望对你有一定的参考价值。

现在有一颗合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度。

分析:输入n个顶点,n-1条边,如果是完全合法的输入,那就简单的有向图,找入度为0的节点,然后广搜或者深搜(深搜代码简单),得到最大的深度就是树的高度。

但是:只过了70%的测试用例,我实在想不出来还有什么情况,1000的数据范围肯定不会超时,我怀疑是否存在非法输入,比如一个节点有超过2个节点的儿子。如果你知道,希望告知一下,谢谢!

 1 /*
 2 ID: y1197771
 3 PROG: test
 4 LANG: C++
 5 */
 6 #include<bits/stdc++.h>
 7 #define pb push_back
 8 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
 9 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
10 typedef long long ll;
11 using namespace std;
12 typedef pair<int, int> pii;
13 const int maxn = 1e3 + 10;
14 vector<int> e[maxn];
15 int n;
16 int res;
17 void dfs(int u, int d) {
18     res = max(res, d);
19     for (auto x : e[u]) {
20         dfs(x, d + 1);
21     }
22 }
23 int du[maxn];
24 void solve() {
25     cin >> n;
26     int x, y;
27     for (int i = 0; i < n - 1; i++) {
28         cin >> x >> y;
29         e[x].push_back(y);
30         du[y]++;
31     }
32     for (int i = 0; i < n; i++) {
33         if(du[i] == 0)
34             dfs(i, 1);
35     }
36     cout << res << endl;
37 
38 }
39 int main() {
40     freopen("test.in", "r", stdin);
41     //freopen("test.out", "w", stdout);
42     solve();
43     return 0;
44 }

 

以上是关于树的高度的主要内容,如果未能解决你的问题,请参考以下文章

css有用的代码片段

树的高度

二叉树——高度和深度

二叉搜索树的高度[关闭]

asp.net页面实用代码片段

BootStrap有用代码片段(持续总结)