洛谷 P4913 二叉树深度 (二叉树+dfs)

题目传送

看题解有大佬有用树状dp的,还有说正解是长链剖分。。。

我太菜了,上面那些都不会,用dfs遍历ac了,不知道是不是数据太水让我水过了。正应了ACM圈一句名言“这题我虽然不会,但ac还是没问题的”。

先用结构体建树:

struct node {
	int l, r;
}tree[maxn];

输入:

for (int i = 1; i <= n; i++) cin >> tree[i].l >> tree[i].r;

dfs遍历树并更新答案:

void dfs(int u, int deep)
{
	if (u == 0)return;//叶节点返回
	ans = max(ans, deep);
	dfs(tree[u].l, deep + 1);
	dfs(tree[u].r, deep + 1);
	return;
}

完整ac代码:

#include <iostream>
#include <algorithm>
using namespace std;

#define maxn 1000000+10

struct node {
	int l, r;
}tree[maxn];

int ans;

void dfs(int u, int deep)
{
	if (u == 0)return;
	ans = max(ans, deep);
	dfs(tree[u].l, deep + 1);
	dfs(tree[u].r, deep + 1);
	return;
}

int main(void)
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> tree[i].l >> tree[i].r;
	dfs(1, 1);
	cout << ans;
	return 0;
}
发布了16 篇原创文章 · 获赞 9 · 访问量 4566

猜你喜欢

转载自blog.csdn.net/qq_43054573/article/details/104203257