在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

回到顶部