C ++中不允许带有相邻级别的树的最大和

在这个问题上,我们得到了一个由正数组成的二叉树。我们的任务是创建一个程序,以从C ++不允许的相邻级别的树中查找最大和。

代码说明

在这里,我们将以这样的方式找到树的最大节点和:该和不包含来自树的两个相邻级别的节点。

让我们举个例子来了解这个问题,

输出结果

21

说明

以root为起始级别,总和= 5 + 3 + 8 +1 = 17以root的子子级为起点,sum = 2 + 6 + 9 + 4 = 21

解决方法

要找到maxSum,一个条件是没有相邻元素。为此,我们将从根节点(级别1)获取一个总和,从子节点(级别2)获取另一个总和。通过找到孙子节点,将从当前节点中提取下一个求和节点。

为此,我们将递归地找到maxSum值,然后从级别1或级别2开始的总和的最大总和值将成为结果maxSum。

示例

该程序说明了我们解决方案的工作原理,

#include<bits/stdc++.h>
using namespace std;
struct Node{
   int data;
   Node* left, *right;
   Node(int item){
      data = item;
   }
};
int getMaxSum(Node* root) ;
int findSumFromNode(Node* root){
   if (root == NULL)
      return 0;
      int sum = root->data;
   if (root->left != NULL){
      sum += getMaxSum(root->left->left);
      sum += getMaxSum(root->left->right);
   }
   if (root->right != NULL){
      sum += getMaxSum(root->right->left);
      sum += getMaxSum(root->right->right);
   }
   return sum;
}
int getMaxSum(Node* root){
   if (root == NULL)
      return 0;
      return max(findSumFromNode(root), (findSumFromNode(root->left) + findSumFromNode(root->right)));
}
int main(){
   Node* root = new Node(5);
   root->left = new Node(2);
   root->right = new Node(10);
   root->left->left = new Node(4);
   root->left->right = new Node(6);
   root->right->right = new Node(9);
   cout<<"The maximum sum from a tree with adjacent levels not allowed is "<<getMaxSum(root);
   return 0;
}

输出结果

The maximum sum from a tree with adjacent levels not allowed is 24