打印所有儿童树元素的最佳算法?

Best algorithm for print all children's for tree element?

本文关键字:最佳 算法 元素 打印      更新时间:2023-10-16

我想使用智能指针创建一棵树。结果是这样的结构:

struct TreeElement {
int data;
std::shared_ptr<TreeElement> parent;
std::list<std::weak_ptr<TreeElement>> childrens;
}

现在,我想显示特定项目的所有子项。如何做得更好?使用哪种算法?例:

void PrintAllChildrens(TreeElement element) {
for (auto& el : element.childrens) {
...
}
}

示例我有树:

10
1   2
3   4 5
6  7

我想要带有数据 1 的元素 打印所有儿童(1(: 结果:

1
3
6 7

访问/打印(子(树的方法只有 3 种:按顺序、预购、后序。

精确的"最佳"算法取决于问题域。在您的情况下,看起来您想要按顺序打印,这将由

void PrintAllChildrens(TreeElement element) {
// Print current level
std::cout << el.data << std::endl;
for (auto& el : element.childrens) {
if (auto child = el.lock())
PrintAllChildrens(*child);
}
}

您可以使用所需的任何类型的缩进和美化来装饰输出。

如果你有一个函数可以在树中找到一个节点并返回一个指向它的指针,那么你可以使用它来调用打印函数:

void PrintAllChildrens(int data)
{
auto node = FindNode(data);
PrintAllChildrens(*node);
}