使用C++查詢N叉樹中給定節點的兄弟節點數


在本文中,我們將提供完整的資料,以確定N叉樹中給定節點的兄弟節點數。我們需要找到其鍵值與使用者給定值相同的節點的兄弟節點;如果不存在,則輸出-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語句檢查這一點並執行我們的程式。

結論

在本文中,我們解決了在O(N)時間複雜度內查詢**N叉樹中給定節點的兄弟節點數**的問題。我們還學習了這個問題的C++程式以及我們解決這個問題的完整方法。我們可以使用C、Java、Python和其他語言編寫相同的程式。

更新於:2021年11月24日

瀏覽量:158

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.