在本文中,我們將提供完整的資訊來確定 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中文網其他相關文章!