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

ค้นหาจำนวนพี่น้องของโหนดที่กำหนดใน N-ary Tree โดยใช้ C++


ในบทความนี้ เราจะให้ข้อมูลที่สมบูรณ์เพื่อกำหนดจำนวนพี่น้องของโหนดที่กำหนดในแผนผัง 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 และภาษาอื่นๆ