我有一个基于向量的二叉树,需要使用各种遍历方法对树中的每个值应用一个函数。使用递归函数很容易实现前序遍历,但我在使用中序遍历和后序遍历时遇到了麻烦。如果有人可以帮忙,那就太好了!
我应该包括一些额外的信息:我正在使用一个节点向量,每个节点都包含一个布尔变量,说明该节点是否被填充和一个模板化的数据变量。每个节点存储在索引“i”中,而其左子节点存储在索引“2i+1”,右子节点存储在“2i+2”。
为了对列表应用前序遍历,我首先处理了存储在索引 0 处的数据,然后调用了这个递归函数
template <typename Item, typename Key>
template <typename Function>
void BST<Item,Key>::preTraverse(int n, Function f) {
if(tree[n].occupied == false) return;
else {
f(tree[n].data);
preTraverse(2*i+1,f);
preTraverse(2*i+2,f);
}
}
两次以索引 1 和 2 开头作为我的“n”参数。