Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++를 사용하여 N-ary 트리에서 주어진 노드의 형제 수 찾기

<시간/>

이 기사에서 우리는 n-ary 트리에서 주어진 노드의 형제 수를 결정하기 위한 완전한 정보를 제공할 것입니다. 사용자가 제공한 키 값으로 노드의 형제를 찾아야 합니다. 그렇지 않으면 -1로 출력합니다. 우리가 사용할 수 있는 방법은 단 하나입니다 -

간단한 접근

이 접근 방식에서는 모든 노드를 살펴보고 자식이 사용자와 동일한 값을 갖는지 확인합니다. 존재하는 경우, 우리는 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 루프를 중단하고 이제 플래그가 트리거되었는지 여부를 확인합니다. 트리거되면 while 루프에서 나옵니다. 그 후, 주어진 값을 가진 노드가 존재하지 않으면 지금 답을 출력하므로 우리의 답 변수는 변경되지 않고 출력은 -1이 됩니다. 루트 값이 주어진 값과 같으면 이를 확인하고 프로그램을 실행하는 if 문이 있습니다.

결론

이 기사에서는 n-ary 트리에서 주어진 노드의 형제 수를 찾는 문제를 풉니다. O(N) 시간 복잡도. 우리는 또한 이 문제에 대한 C++ 프로그램과 이 문제를 해결하기 위한 완전한 접근 방식을 배웠습니다. C, Java, python 및 기타 언어와 같은 다른 언어로 동일한 프로그램을 작성할 수 있습니다.