使用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和其他語言編寫相同的程式。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP