我正在尝试使函数“ InOrder”在二进制搜索中进行顺序遍历

时间:2019-05-27 07:13:06

标签: c++ data-structures binary-search-tree inorder

我正在尝试将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函数有帮助。

1 个答案:

答案 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);
}