Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ผลรวมสูงสุดของโหนดที่ไม่ใช่ใบไม้ในทุกระดับของไบนารีทรีที่กำหนดใน C++


ในปัญหานี้ เราได้รับไบนารีทรี งานของเราคือสร้างโปรแกรมที่จะค้นหาผลรวมสูงสุดของโหนดที่ไม่ใช่ใบไม้ในทุกระดับของไบนารีทรีที่กำหนดใน c++

คำอธิบายปัญหา − เราจะคำนวณผลรวมของโหนดที่ไม่ใช่ใบไม้ทั้งหมดของต้นไม้และทุกระดับ จากนั้นพิมพ์ผลรวมสูงสุด

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล

ผลรวมสูงสุดของโหนดที่ไม่ใช่ใบไม้ในทุกระดับของไบนารีทรีที่กำหนดใน C++

ผลผลิต − 9

คำอธิบาย − ผลรวมของโหนดที่ไม่ใช่ใบในแต่ละระดับ −

Level 1: 4
Level 2: 1+2 = 3
Level 3: 9 (4, 7 are leaf nodes)
Level 4: 0

เพื่อแก้ปัญหานี้ เราจะต้องทำการสำรวจระดับของไบนารีทรีและหาผลรวมของโหนดทั้งหมดที่ไม่ใช่โหนดลีฟ แล้วหาผลรวมสูงสุดของโหนดเหล่านี้

ดังนั้นในแต่ละระดับ เราจะตรวจสอบว่าโหนดมีลูกด้านซ้ายหรือขวาหรือไม่ ถ้าไม่ใช่ ให้เพิ่มลงในผลรวม และรักษา maxSum ที่จัดเก็บผลรวมสูงสุดจนถึงระดับ หากผลรวมของโหนดที่ไม่ใช่โหนดลีฟทั้งหมดมากกว่า maxSum เราจะเริ่มต้นผลรวมของระดับนั้นจนถึงค่าสูงสุด

ตัวอย่าง

โปรแกรมแสดงการใช้งานโซลูชันของเรา

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *left, *right;
};
int maxLevelSum(struct Node* root){
   if (root == NULL)
      return 0;
   int maxSum = root->data;
   queue<Node*> q;
   q.push(root);
   while (!q.empty()) {
      int count = q.size();
      int levelSum = 0;
      while (count--) {
         Node* temp = q.front();
         q.pop();
         if (temp->left != NULL || temp->right != NULL)
            levelSum = levelSum + temp->data;
         if (temp->left != NULL)
            q.push(temp->left);
         if (temp->right != NULL)
            q.push(temp->right);
      }
      maxSum = max(levelSum, maxSum);
   }
   return maxSum;
}
struct Node* insertNode(int data) {
   struct Node* node = new Node;
   node->data = data;
   node->left = node->right = NULL;
   return (node);
}
int main() {
   struct Node* root = insertNode(6);
   root->left = insertNode(1);
   root->right = insertNode(2);
   root->left->left = insertNode(4);
   root->left->right = insertNode(7);
   root->right->right = insertNode(9);
   root->right->right->left = insertNode(5);
   cout<<"The maximum sum of all non-lead nodes at a level of the binary tree is "<<maxLevelSum(root);
   return 0;
}

ผลลัพธ์

The maximum sum of all non-lead nodes at a level of the binary tree is 9