使用 C++ 查找遍历 N 叉树的方法数量
c++server side programmingprogramming
给定一棵 N 叉树,我们的任务是查找遍历这棵树的总方法数量,例如 −
对于上面的树,我们的输出将是 192。
对于这个问题,我们需要了解一些组合学知识。现在,在这个问题中,我们只需要检查每条路径的所有可能组合,这样我们就能得到答案。
寻找解决方案的方法
在这种方法中,我们只需要执行水平顺序遍历并检查每个节点具有的子节点数量,然后简单地将其阶乘乘以答案。
示例
上述方法的 C++ 代码
#include<bits/stdc++.h> using namespace std; struct Node{ // 我们节点的结构 char key; vector<Node *> child; }; Node *createNode(int key){ // 用于初始化新节点的函数 Node *temp = new Node; temp->key = key; return temp; } long long fact(int n){ if(n <= 1) return 1; return n * fact(n-1); } int main(){ Node *root = createNode('A'); (root->child).push_back(createNode('B')); (root->child).push_back(createNode('F')); (root->child).push_back(createNode('D')); (root->child).push_back(createNode('E')); (root->child[2]->child).push_back(createNode('K')); (root->child[1]->child).push_back(createNode('J')); (root->child[3]->child).push_back(createNode('G')); (root->child[0]->child).push_back(createNode('C')); (root->child[2]->child).push_back(createNode('H')); (root->child[1]->child).push_back(createNode('I')); (root->child[2]->child[0]->child).push_back(createNode('N')); (root->child[2]->child[0]->child).push_back(createNode('M')); (root->child[1]->child[1]->child).push_back(createNode('L')); queue<Node*> q; q.push(root); long long ans = 1; while(!q.empty()){ auto z = q.front(); q.pop(); ans *= fact(z -> child.size()); cout << z->child.size() << " "; for(auto x : z -> child) q.push(x); } cout << ans << "\n"; return 0; }
输出
4 1 2 2 1 0 0 1 2 0 0 0 0 0 192
上述代码的解释
在这种方法中,我们应用 BFS(广度优先搜索)或水平顺序遍历并检查每个节点具有的子节点数。然后,将该数字的阶乘乘以我们的答案。
结论
本教程找到了几种通过应用 BFS 来遍历 N 元树组合的方法。我们还学习了这个问题的 C++ 程序和我们解决的完整方法。
我们可以用其他语言(如 C、java、python 和其他语言)编写相同的程序。我们希望您觉得本教程有用。