ในปัญหานี้ เราได้รับไบนารีทรีที่ประกอบด้วยจำนวนบวก งานของเราคือสร้างโปรแกรมเพื่อค้นหาผลรวมสูงสุดจากทรีที่มีระดับที่อยู่ติดกันไม่ได้รับอนุญาตใน C ++
คำอธิบายโค้ด
ที่นี่ เราจะพบผลรวมสูงสุดของโหนดของต้นไม้ในลักษณะที่ผลรวมไม่มีโหนดจากสองระดับที่อยู่ติดกันของต้นไม้
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ผลลัพธ์
21
คำอธิบาย
การรูทเป็นระดับเริ่มต้น ผลรวม =5 + 3 + 8 + 1 =17 การรูทย่อยของรูทเป็นระดับเริ่มต้น ผลรวม =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