ในบทความนี้ เราจะให้ข้อมูลที่สมบูรณ์เพื่อกำหนดจำนวนพี่น้องของโหนดที่กำหนดในแผนผัง n-ary เราจำเป็นต้องค้นหาพี่น้องของโหนดด้วยค่าของคีย์ตามที่ผู้ใช้กำหนด หากไม่ใช่ ให้ส่งออกเป็น -1 มีทางเดียวเท่านั้นที่เราสามารถใช้ได้ -
แนวทางง่ายๆ
ในแนวทางนี้ เราจะตรวจสอบโหนดทั้งหมดและตรวจสอบว่าลูกมีค่าเท่ากับผู้ใช้หรือไม่ หากมี เราจะตอบจำนวนลูก - 1(ค่าที่กำหนด)
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
class Node { // structure of nodes of our tree.
public:
int key;
vector<Node*> child;
Node(int data){
key = data;
}
};
int main(){
// Building The Tree
Node* Base = new Node(50);
(Base->child).push_back(new Node(2));
(Base->child).push_back(new Node(30));
(Base->child).push_back(new Node(14));
(Base->child).push_back(new Node(60));
(Base->child[0]->child).push_back(new Node(15));
(Base->child[0]->child).push_back(new Node(25));
(Base->child[0]->child[1]->child).push_back(new Node(70));
(Base->child[0]->child[1]->child).push_back(new Node(100));
(Base->child[1]->child).push_back(new Node(6));
(Base->child[1]->child).push_back(new Node(1));
(Base->child[2]->child).push_back(new Node(7));
(Base->child[2]->child[0]->child).push_back(new Node(17));
(Base->child[2]->child[0]->child).push_back(new Node(99));
(Base->child[2]->child[0]->child).push_back(new Node(27));
(Base->child[3]->child).push_back(new Node(16));
int x = 30;
queue<Node*> q;
q.push(Base);
bool flag = 0;
int answer = -1;
if(Base -> key != x){
while(!q.empty()){
auto parent = q.front();
q.pop();
for(int i = 0; i < parent -> child.size(); i++){
if(parent -> child[i] -> key == x){
answer = parent -> child.size() - 1;
flag = 1;
break;
}
q.push(parent -> child[i]);
}
if(flag)
break;
}
cout << answer << "\n";
}
else
cout << "0\n";
return 0;
} ผลลัพธ์
3
คำอธิบายของโปรแกรมข้างต้น
ในโปรแกรมนี้ เรารักษาคิวที่จะมีโหนดที่ยังไม่ได้เยี่ยมชมอยู่ภายใน และโหนดที่เยี่ยมชมจะถูกเปิดออกมา ตอนนี้ เมื่อเราสำรวจโหนด เราจะสำรวจลูกของมัน และหากค่าของเด็กตรงกับ x แฟล็กของเราจะถูกทริกเกอร์ และตัวแปรคำตอบของเราได้รับการกำหนดค่าของ child.size() - 1 และ จากนั้นเราเจาะผ่าน for a loop ตอนนี้เราตรวจสอบว่าแฟล็กถูกทริกเกอร์หรือไม่ ถ้ามันถูกทริกเกอร์ เราก็ออกมาจากลูป while หลังจากนั้น เราจะพิมพ์คำตอบทันที หากไม่มีโหนดที่มีค่าที่กำหนด ดังนั้นตัวแปรคำตอบของเราจะไม่เปลี่ยนแปลง และผลลัพธ์จะเป็น -1 หากค่ารูทมีค่าเท่ากับที่กำหนด จะมีคำสั่ง if ที่ตรวจสอบค่านั้นและรันโปรแกรมของเรา
บทสรุป
ในบทความนี้ เราแก้ปัญหาเพื่อค้นหา จำนวนพี่น้องของโหนดที่กำหนดในทรี n-ary ในความซับซ้อนของเวลา O(N) นอกจากนี้เรายังได้เรียนรู้โปรแกรม C ++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ซึ่งเราแก้ไขปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ