微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算存储为向量数组的通用树的每个节点的高度 C++

如何解决计算存储为向量数组的通用树的每个节点的高度 C++

我在 C++ 中以向量数组的形式存储了一棵树,这样每行的第一列包含该节点的子节点总数,然后每行的后续列包含所有该节点的子节点。

vector <long long int> nodes[N];

例如 - 有 N=8 个节点,如果 vu 的直接子节点,给定树的节点是

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,-1) 其中 arr 是大小为 n 的空向量,即 vector<int> arr(n,0);

,

经过一番思考,我可以设计出一个迭代解决方案。

int heights[N] = {0};
        
        for(long long int i = N-1;i>=0;i--){
            
            int max = 0;
            int no_child = nodes[i][0];
            
            for(int j=1;j<=no_child;j++){
                if(heights[nodes[i][j]] > max){
                    max = heights[nodes[i][j]];
                }
            }
            
            max++;
            heights[i] = max;
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。