gpt4 book ai didi

c++ - 如何不重复打印树的代码

转载 作者:行者123 更新时间:2023-12-03 10:05:19 26 4
gpt4 key购买 nike

我有一个从左到右打印树节点的函数。

void PrintTree()
{
...
Print(curentNode);
...
}
但是现在我想添加一个函数来打印满足某些条件的节点。
例如,只打印这样的节点,其中的字符串以给定的字符串开头。所以它看起来像
void PrintTreeByCondition(string a)
{
...
if(IsPrefix(a,curentNode->stringVar))
Print(curentNode);
...
}
但是后来我有两个具有相同代码的函数,不同之处在于一行。我将如何避免代码重复?
UPD:遍历代码:
void BinTree::TraverseTree()
{
std::stack<TreeNode*> s;
s.push(root);
TreeNode* curentNode = s.top();
while (curentNode != nullptr|| s.empty() == false)
{
while (curentNode != nullptr)
{
s.push(curentNode);
curentNode = curentNode->GetLeft();
}

curentNode = s.top();
s.pop();

// do stuff

curentNode = curentNode->GetRight();
}
}

最佳答案

C++ 的方法是为遍历创建一个迭代器,并将其用于打印以及过滤或其他用途。遍历一棵树可能以双向方式完成,这也将允许大量算法对树进行访问。事实上,有序关联容器(例如, std::mapstd::set )通常被实现为 [平衡] 二叉树,并且它们的迭代器进行有序遍历。
迭代的细节确实取决于树表示。关联容器通常使用父指针实现。如果没有这样的指针,每个迭代器将需要保持合适的空间来表示返回根的路径(标准库容器不能这样做,因为它们对迭代器稳定性有要求,这阻止了这种情况)。使用迭代器进行遍历的一点奇怪之处在于它并不直接适用于使用递归的实现。作为返回,迭代的控制权交给迭代器的用户。

关于c++ - 如何不重复打印树的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65441703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com