使用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

开启你的职业生涯

通过完成课程获得认证

开始学习
广告