c++ - 计算存储为向量数组 C++ 的通用树的每个节点的高度
问题描述
我在 C++ 中以向量数组的形式存储了一棵树,这样每行的第一列由该节点的子节点总数组成,然后每行的后续列由所有子节点的索引组成那个节点的。
vector <long long int> nodes[N];
例如 - 有N=8
节点,如果v
是 的直接子节点,则u
给定树的节点是
u v
1 2
1 3
2 4
2 5
4 6
4 7
6 8
那么向量数组nodes
将是
0. 2 2 3
1. 2 4 5
2. 0
3. 2 6 7
4. 0
5. 1 8
6. 0
7. 0
现在,我想将每个节点的高度保存在一个大小为 N 的新数组中。如何为此开发算法?
解决方案
您可以使用此函数计算树中每个节点的高度。
它是一个简单的树的 DFS,根为0
.
int height(vector<int> nodes[], vector<int> &arr, int u, int p){
int ans = 0;
for(int i=1;i<=nodes[u][0];i++){
if(nodes[u][i]!=p){
ans=max(ans, height(nodes, arr, nodes[u][i], u));
}
}
return arr[u] = 1 + ans;
}
该函数可以如下调用:height(nodes, arr, 0, -1)
其中arr
是一个大小为空的向量,n
即,vector<int> arr(n, 0);
推荐阅读
- c# - If-else 构造失败(.NET Framework)
- python - 使用 Selenium 删除 PopUp
- flutter - 下拉值不能设置为空
- c# - 在另一台计算机上将 C# 应用程序与 Mysql 数据库一起使用
- amazon-s3 - 使用 AWS CLI 导入 VM 映像
- azure-active-directory - 如何使用 Active Directory 身份验证通过 URL 访问 Azure Blob?
- java - eclipse java中的opencv
- angularjs - AngularJS:ng-model 指令
- reactjs - React styled-components - 类型 'StyledComponent<"label", any, {}, never>' 不可分配给类型 'never'
- javascript - 我如何在我的反应引导表中添加新行