2017小米服务端开发笔试(求二叉树高度)

来源:互联网 发布:java图形界面开发框架 编辑:程序博客网 时间:2024/05/22 17:06

本题的思路:

dfs

#include<stdio.h>    #include<iostream>    #include<math.h>    #include<stdlib.h>    #include<ctype.h>    #include<algorithm>    #include<vector>    #include<string.h>    #include<queue>    #include<stack>    #include<set>    #include<map>    #include<sstream>    #include<time.h>    #include<utility>    #include<malloc.h>    #include<stdexcept>    #include<iomanip>    #include<iterator>    #include<string>using namespace std;int n, ans;vector<int> a[101000];void dfs(int u, int num){ans = max(ans, num);for (int i = 0;i < a[u].size();i++){int v = a[u][i];dfs(v, num + 1);}}int main(){while (scanf("%d", &n) != EOF){int u, v;for (int i = 0;i < 1010;i++)a[i].clear();for (int i = 1;i < n;i++){scanf("%d%d", &u, &v);a[u].push_back(v);}ans = 0;for (int i = 0;i < n;i++){dfs(i, 1);}printf("%d\n", ans);}return 0;}

第二种写法 其实一样

#include <iostream>#include <vector>#include <cstdio>#include <cstring>#include <map>using namespace std;struct E {int v;E *next;};struct G {E *h[1010], e[1010], *re;void init(int n) {memset(h, 0, sizeof(h[0])*n);re = e;}void add(int u, int v) {re->v = v;re->next = h[u];h[u] = re++;}void dfs(int u, int dep, int &ans) {ans = max(ans, dep);for (E *i = h[u]; i; i = i->next)dfs(i->v, dep + 1, ans);}} g;int indeg[1010];int main() {int n, u, v, r;scanf("%d", &n);g.init(n);for (int i = 1; i < n; ++i) {scanf("%d%d", &u, &v);g.add(u, v);++indeg[v];}int ans = 0;for (int i = 0; i < n; ++i)g.dfs(i, 1, ans);printf("%d", ans);return 0;}


0 0
原创粉丝点击