如何删除分支因子不一致的树,最大为 30,40
How do I delete a tree with an inconsistant branching factor up to 30,40
如果树的最大分支因子为 2,我知道如何逐个节点删除整个树。基本上是尽可能向右走,然后尝试向左走。直到您达到左右 ptr = NULL 的点。如果树的最大分支因子为 40,我真的不知道如何在代码中执行此操作。
这是我删除和查找树的最高深度的代码。
int FindDepth(Node* root, bool GoingRight, int Depth = 0, int DepthCompare = 0) {
if (GoingRight) {
// If we have reached an end
if (root->right == NULL) {if (Depth > DepthCompare)DepthCompare = Depth; }
// If space continue going right
else DepthCompare = FindDepth(root->right, true, Depth + 1, DepthCompare);
// Time for going left
GoingRight = false;
}
if (!GoingRight) {
// If we have reached an end
if (root->left == NULL) {if (Depth > DepthCompare)DepthCompare = Depth; }
// If space try going right
else DepthCompare = FindDepth(root->left, true, Depth + 1, DepthCompare);
}
delete root;
return DepthCompare;
}
如果我有一个最多 40 个孩子的节点,任何提示。
应用深度优先搜索在这里看起来很方便。您只需将每个节点的子节点添加到堆栈中,当堆栈不为空时,您可以弹出一个节点并对其执行相同的操作,直到到达可以删除的叶节点。
一个很好的实现 C++ 来自 geeksforgeeks 这里。
这里唯一的区别是,您将其应用于树,因此无需担心周期。您应该直接到达一个叶节点,您可以安全地删除该节点。
如果树的最大分支因子为 2,我知道如何逐个节点删除整个树。基本上是尽可能向右走,然后尝试向左走。直到您达到左右 ptr = NULL 的点。
对于任何内容的最大分支因子,只需要进行两项更改:
基本上尽可能向右走,然后尝试向右转第二,向右第三,...,向右(又名左(。直到你达到所有ptr == NULL 的点。
不过,我不会尝试将这些更改楔入您的代码中。该代码具有许多硬编码的假设,因此最好重新启动。(例如,将GoingRight
设为bool
假定只有两个选择。另一方面,GoingRight
并不是那么有用,因为它总是作为true
传入,并且总是在检查if(!GoingRight)
之前设置为false
。考虑循环而不是一个接一个地写出案例(即而不是向右走,然后向左走(。树存储指向其子项的指针的方式应有助于指导代码。
如果你只需要删除一棵树,并且你保留了对子项的引用,例如,在数组中,你可以编写非常简单的代码:
const int BranchingFactor = 40;
struct Node
{
Node * Children[BranchingFactor];
};
void DeleteSubTree(Node * root)
{
if (root != NULL)
{
for (int childNumber = 0; childNumber < BranchingFactor; childNumber++)
DeleteSubTree(root->Children[childNumber]);
delete root;
}
}
- 大于65535的C++数组[size]引发不一致的溢出
- 在 C++(和 C)中进行类型转换时明显不一致
- 填充上编译器生成的复制构造函数之间的不一致
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- CreateDIBSection为同一图像返回不一致的位图位值
- 在 Qml 中从 QSqlTableModel 中删除单行时视图不一致
- 模板参数推导不一致
- 声明中不一致的no是否违反ODR?
- 如何删除分支因子不一致的树,最大为 30,40
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- 使用new时如何重新分配dyyanmic数组,不使用realloc删除C++?
- 这种比较是否不一致(或者存在其他问题)?
- 以下可变参数模板行为是否不一致?
- 如何修复我的链表读数不一致的问题?
- 在C++17中,为什么类模板和函数模板的指针类型推导明显不一致
- void 函数中的指针参数返回不一致的值
- 如何查找导致结果不一致的代码
- 跨平台 mySQL 与字符集不一致
- 当指定初始化程序的顺序和字段声明不一致时,clang可以删除函数调用