在C ++中将树转换为偶数节点的森林
在本教程中,我们将讨论将树转换为偶数节点林的程序。
为此,我们将提供一个由N个节点组成的二叉树。我们的任务是计算可以删除以获得偶数节点林的最大边数。
示例
#include<bits/stdc++.h>#define N 12
using namespace std;
//返回子树的节点数
//具有根节点
int depth_search(vector<int> tree[N], int visit[N], int *ans, int node){
int num = 0, temp = 0;
//将节点标记为已访问
visit[node] = 1;
for (int i = 0; i < tree[node].size(); i++){
if (visit[tree[node][i]] == 0){
//查找子树的总节点
temp = depth_search(tree, visit, ans, tree[node][i]);
//如果节点是偶数,则将要删除的边增加1-
(temp%2)?(num += temp):((*ans)++);
}
}
return num+1;
}
//返回要删除的最大边缘数
int print_maxedge(vector<int> tree[N], int n){
int visit[n+2];
int ans = 0;
memset(visit, 0, sizeof visit);
depth_search(tree, visit, &ans, 1);
return ans;
}
int main(){
int n = 10;
vector<int> tree[n+2];
tree[1].push_back(3);
tree[3].push_back(1);
tree[1].push_back(6);
tree[6].push_back(1);
tree[1].push_back(2);
tree[2].push_back(1);
tree[3].push_back(4);
tree[4].push_back(3);
tree[6].push_back(8);
tree[8].push_back(6);
tree[2].push_back(7);
tree[7].push_back(2);
tree[2].push_back(5);
tree[5].push_back(2);
tree[4].push_back(9);
tree[9].push_back(4);
tree[4].push_back(10);
tree[10].push_back(4);
cout << print_maxedge(tree, n) << endl;
return 0;
}
输出结果
2
以上是 在C ++中将树转换为偶数节点的森林 的全部内容, 来源链接: utcz.com/z/316725.html