1

使用递归为二叉搜索树创建遍历。

void inOrder(void (*inOrderPtr)(T&)) 
{ 
    if(this->left != NULL) 
        inOrder((*inOrderPtr)(this->left)); 
    inOrderPtr(this->data); 
    if(this->right != NULL) 
        inOrder((*inOrderPtr)(this->right)); 
} 

这是功能。现在这显然是错误的。这个函数是这样调用的:

first.inOrder(print_vals);

首先是对象,而 print vals 只是一个打印对象中数据的函数。每个对象都有三个值,数据、左和右。我如何使用该功能实际访问这些项目?

4

1 回答 1

3

看起来调用inOrderPtr(this->data)只是将data树节点的成员传递给print_vals函数。如果您想访问leftright元素,请使用inOrderPtr(*this). 您必须更改各种声明才能编译,例如 和 的inOrderPtr声明print_vals。如果没有看到您的其余代码,很难说出您需要将它们更改为什么。

另一方面,在我看来,您可能希望将递归调用编写得更像这样:

this->left->inOrder(inOrderPtr);

不过,我正在对您的实施做出假设。

于 2008-10-15T21:15:40.793 回答