#include<iostream>
#include <vector>
using namespace std;
int dfs(int i, vector<vector<int>>&vec)//深度递归
{int count;
int MAX = 0;
if (vec[i].size() == 0)
{
return 1;//末尾就返回1
}
for (int g = 0; g < vec[i].size(); g++)
{
MAX=max(MAX,dfs(vec[i][g],vec));//从结点子孙开始继续递归
}
count = MAX + vec[i].size()-1;//选中的MAX,其他结点只算+1
if (i != 1)
count++;//结点1本身不算深度,其他就算
return count;
}
int main()
{int n;
cin >> n;
int a;
vector<vector<int> >vec(n+1);
for (int i = 2; i <= n; i++)
{ cin >> a;
vec[a].push_back(i);//把内容存进去
}
cout<< dfs(1,vec);
return 0;
}
左孩子右兄弟 蓝桥杯c++
本文详细介绍了使用C++编写的深度优先搜索(DFS)算法,通过递归函数`dfs`遍历树结构,计算从根节点到指定节点的深度。
摘要由CSDN通过智能技术生成