我正在尝试将InOrder设置为void类型,该类型将在二叉搜索树中执行有序遍历。
dedupe
上面的代码由教授提供,作为制作我自己的InOrder函数的参考。
此代码是我声明二进制搜索树的元素(必备条件)的方式。
//Code Provided by Professor
//Program 5.1:Inorder traversal of a binary tree
//===============================================
template <class T>
void Tree<T>::Inorder()
{// Driver.
Inorder(root);
}
template <class T>
void Tree<T>::Inorder(TreeNode<T> *currentNode)
{// Workhorse.
if (currentNode) {
Inorder(currentNode->leftChild);
Visit(currentNode);
Inorder(currentNode->rightChild);
}
}
其他功能运行良好,我希望使用C ++对制作InOrder函数有帮助。
答案 0 :(得分:0)
顺序的概念只是顺序的概念。您还必须说出应按该顺序进行的操作。教授提供的代码称为visit
函数。
这意味着在您的实现中,您还需要这样的访问功能。它既可以硬编码(在cout
上显示一个节点),也可以更好地作为参数传递。在这种情况下,您应该将InOrder
声明为:
void InOrder(void (*visit)(const pair<K, E>&))const;
然后将其命名为(例如,使用lambda函数):
BST<int, string> bst;
...
bst.InOrder([](const pair<int, string>&ke) {
cout << "K: " << ke.first << " -E: " << ke.second << "\n";
});
模仿教授代码的可能实现方式可能是:
template<class K, class E>
void BST<K,E>::doInOrder(const TN* root, void (*visit)(const pair<K, E>&)) {
if (root) {
doInOrder(root->leftChild, visit);
visit(root->data);
doInOrder(root->rightChild, visit);
}
}
template<class K, class E>
void BST<K,E>::InOrder(void (*visit)(const pair<K, E>&))const {
doInOrder(root, visit);
}