首頁  >  文章  >  後端開發  >  使用C++編寫,找到N叉樹中給定節點的兄弟節點數量

使用C++編寫,找到N叉樹中給定節點的兄弟節點數量

WBOY
WBOY轉載
2023-08-26 20:33:061201瀏覽

使用C++編寫,找到N叉樹中給定節點的兄弟節點數量

在本文中,我們將提供完整的資訊來確定 n 叉樹中給定節點的兄弟節點數量。我們需要使用使用者給定的 key 值來找到該節點的兄弟節點;如果不是,則輸出-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 叉樹中給定節點的兄弟節點數量,時間複雜度為O(N) 。我們也學習了解決這個問題的C 程式以及解決這個問題的完整方法。我們可以用其他語言寫相同的程序,例如C、java、python等語言。

以上是使用C++編寫,找到N叉樹中給定節點的兄弟節點數量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除